ssh代理:给系统分配一个无登陆权限的账号来做ssh代理

之前申请了一个免费的亚马逊云服务器作为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

  1. 在本机生成一对公钥/私钥
    $ ssh-keygen -t rsa -P ''

    这时会在当前用户的home目录下生成.ssh目录,里面有id_rsa和id_rsa.pub两个文件,id_rsa.pub是之后要放到服务器端的公钥,可以使本机无需密码直接与服务器进行ssh连接。

  2. 在服务器新建一个nologin权限的账号ssh-agent
    $ useradd -s /usr/sbin/nologin ssh-agent

    这个命令为系统新建了一个用户ssh-agent,同时新建了他所属的ssh-agent用户组,该用户的登陆shell为/usr/bin/nologin,亦即不允许该用户登录。检查/etc/passwd文件,最后一行应为:屏幕快照 2015-09-02 上午2.33.44

  3. 在服务器端创建文件/home/ssh-agent/.ssh/authorized_keys。步骤2中的命令并未创建/home/ssh-agent目录,需自行创建。authorized_keys的意思,即表示受信的ssh公钥
  4. 将本机生成的id_rsa.pub内容添加到服务器的authorized_keys文件中。直接vi打开,复制粘贴就可以了。
  5. 在本机执行以下命令即可开启ssh隧道
    $ ssh -qTfnN -D 3128 ssh-agent@51.188.xx.xx

    可以使用ps -ef|grep ssh检查该命令是否已在后台执行。

  6. 配置firefox的代理工具,使用127.0.0.1:3128作为ssh代理进行翻墙。屏幕快照 2017-08-02 下午7.55.09

 

 

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可用。

1 thought on “ssh代理:给系统分配一个无登陆权限的账号来做ssh代理”

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top