ssh不间断提供跨越长城服务

Page content

好吧,我首先承认我是一个重度Google服务依赖者。所以每次看到连接被重置我就很崩溃。当初也是基于此目的而买的VPS。不过由于VPS不支持VPN,另外我也觉得VPN设置路由比较麻烦(需要区分国内国外的网站),所以一直没有换支持VPN的VPS。

这几年一直都是使用ssh -D提供服务。由于我不看视频,因此勉强觉得速度不是问题。由于我一直觉得windows下用putty/plink进行ssh比较慢(也许是心理作用),所以我一般在linux服务器上建立ssh通道,然后通过浏览器设置socks5代理进行穿越。

由于某些原因,ssh -D运行后总是自己就断了,也许是网络原因,也许是某些“特殊原因”。总之我需要提供一个持续的ssh服务。

这里有一种方法。我试了下,不好用(主要是我没有成功)。于是我就想使用rsa public key来进行登录。

第一步,创建用户:

sudo useradd -m -U gfw

查看下用户:

cat /etc/passwd|grep gfw gfw:x:1001:1001::/home/gfw:/bin/bash

现在使用此用户登录

sudo su - gfw

第二步,生成密钥:

ssh-keygen -t rsa -f ~/.ssh/id_rsa_gfw -q -P ""

这样就生成了一个不需要密码验证的密钥对。 我们将密钥对加入认证文件。

cat ~/.ssh/id_rsa_gfw.pub >> ~/.ssh/authorized_keys

查看下:

cat ~/.ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+r9+2ei+80lee9xbi3FmDcpBIVip1MQLXEdutvMXMnefi7FSq OdCJYrmxFNzhtLDzBLLrQhTK9Tu7VCCXlDlVErKsRfF8tEr7w4/f8jEb+I3ZlkvKVgmlMx205pkX+6VW16Gc9M9dHhZj3POhqzcpNzN0o3 e0qZOVzO+rwbj2L17hBLNpkmOFanSd+bzz0j8TjJHz7uGXrNU6w8vMVqjlf/N0wFCFKavyf0jT7YdUjLo4aErbLfFrjB9ed3nI/Vdv549y ANnvh4ldNf7dFUijH7nXjkrA0Gnhytfp7a5EhJ2FsBkEJrwSbPFsju/GLssQ0suOtCLdmUXhAOJqUgkN gfw@myvps

第三步,循环登录:

以上两个步骤是在vps上进行的。这第三步是在客户端进行的。 我们将vps上的私钥拷贝下来。

写一个登录脚本/bin/pssh。

#!/bin/bash
loop="true" while [ -n "$loop" ] do ssh -N -D 127.0.0.1:11111 -i ~/.ssh/id_rsa_gfw gfw@myvps done

这里使用while死循环一直执行此命令。一旦上一个ssh命令退出了,立即创建一个新的ssh命令。

  • -N 表示不登录shell
  • -D 表示绑定的ip以及端口地址
  • -i 表示使用我们制定的私钥,而不是默认的id_rsa
  • 最后就是vps的用户名以及ip地址了

接着运行此脚本即可。 为了安全起见,此用户gfw只是为了ssh穿越防火墙,不作为登录用户。因此关闭此用户的登录功能。

修改vps上的文件/etc/passwd:

  • gfw:x:1001:1001::/home/gfw:/bin/bash

将gfw对应的登录shell bash修改为false,使用vi/vim修改即可:

  • gfw:x:1001:1001::/home/gfw:/bin/false

现在运行此脚本,收工。

nohup pssh > /tmp/pssh &