之前申请了一个免费的亚马逊云服务器作为VPN Server,同时自己电脑使用默认的ubuntu账号进行ssh翻墙:firefox+foxyproxy+ssh简直不要太方便。附上一份本机开启ssh隧道的shell脚本:
#! /bin/bash pid=$(ps -ef|grep 'ssh -qTfnN -D 3128'|grep -v grep|awk '{print $2}') if [[ $pid = "" ]] then echo '启动ssh代理进程...' ssh -qTfnN -D 3128 -i /Users/xxx/aws_ec2.pem ubuntu@52.188.xx.xx else echo '已存在ssh代理进程[pid='$pid']' fi echo '按任意键退出' read -n1
今天老婆大人海淘时候抱怨vpn太麻烦,所以就想给她也配一个ssh代理,但又不想给她用默认的ubuntu账号,想着给她一个最低权限的账号。在网上找了半天总算搞定。
环境:
远端服务器:Ubuntu 14.04
本机:MacOS
- 在本机生成一对公钥/私钥
$ ssh-keygen -t rsa -P ''
这时会在当前用户的home目录下生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,id_rsa.pub是之后要放到服务器端的公钥,可以使本机无需密码直接与服务器进行ssh连接。
- 在服务器新建一个nologin权限的账号ssh-agent
$ useradd -s /usr/sbin/nologin ssh-agent
这个命令为系统新建了一个用户ssh-agent,同时新建了他所属的ssh-agent用户组,该用户的登陆shell为/usr/bin/nologin,亦即不允许该用户登录。检查/etc/passwd文件,最后一行应为:
- 在服务器端创建文件/home/ssh-agent/.ssh/authorized_keys。步骤2中的命令并未创建/home/ssh-agent目录,需自行创建。authorized_keys的意思,即表示受信的ssh公钥
- 将本机生成的id_rsa.pub内容添加到服务器的authorized_keys文件中。直接vi打开,复制粘贴就可以了。
- 在本机执行以下命令即可开启ssh隧道
$ ssh -qTfnN -D 3128 ssh-agent@51.188.xx.xx
可以使用ps -ef|grep ssh检查该命令是否已在后台执行。
- 配置firefox的代理工具,使用127.0.0.1:3128作为ssh代理进行翻墙。
ps: 但是ssh代理如果在一段时间内无访问的话会自动断线,大概就几分钟吧,这就比较麻烦了。可以修改本机的/etc/ssh/ssh_config文件,让ssh自动发送心跳保持连接状态。
# 每60秒像服务器发送一个心跳请求 ServerAliveInterval 60 # 超过3次心跳请求无回应则断开连接 ServerAliveCountMax 3
同样,在服务器端也有类似配置/etc/ssh/sshd_config
ClientAliveCountMax 3 ClientAliveInterval 60
不过如果本机从待机、休眠状态恢复,ssh连接还是会掉的,所以我后来还是又搭了一个shadowsocks服务器,在本机用shadowsocks客户端,起码不用每次重新拨号,还有pac可用。
不要太牛逼啊