1,前提条件
A机位于公司的NAT网络,是一台安装在VMware Workstation Player里的Debian 8 64bit虚拟机,本地用户为userA, SSH服务运行于22端口上;
B机是一台有公网IP的VPS,系统为CentOS 6 64bit,本地用户为userVPS, SSH服务运行于1022端口上;
C机位于家庭的NAT网络,系统为Windows。
下面开始操作步骤。
2,B机(VPS)的操作
$ vim /etc/ssh/sshd_config #打开如下选项 GatewayPorts yes $ /etc/init.d/sshd reload
3,A机的操作
前面说了,A机位于公司内部NAT网络内,是一台安装在VMware Workstation Player里的Debian 8 64bit虚拟机。
sudo apt-get install autossh 配置A机可以免密码登陆到VPS(B机),方法为将A机的公钥发给VPS(B机),这样A机开机时就可以自动建立一条到VPS的SSH隧道 $ ssh-keygen -t rsa #连续三次回车,即在本地生成了公钥和私钥,不要设置密码 $ ssh-copy-id -p VPS的SSH端口 -i ~/.ssh/id_rsa.pub userVPS@VPS的IP $ sudo touch /var/log/ssh_nat.log && sudo chmod 777 /var/log/ssh_nat.log $ /usr/bin/autossh -p VPS的SSH端口 -M 6777 -NR 8388:127.0.0.1:22 userVPS@VPS的IP -i ~/.ssh/id_rsa 添加的一个-M 6777参数,负责通过6777端口监视连接状态,连接有问题时就会自动重连,去掉了一个-f参数,因为autossh本身就会在background运行。 sudo vim /lib/systemd/system/autossh.service #将下例内容粘贴复制进去
[Unit] Description=Auto SSH Tunnel After=network-online.target [Service] User=userA #改掉这里A机的用户 Type=simple ExecStart=/usr/bin/autossh -M 6777 -NR 8388:127.0.0.1:22 -i ~/.ssh/id_rsa userVPS@VPS的IP -p VPS的SSH端口 >> /var/log/ssh_nat.log 2>&1 & ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=always [Install] WantedBy=multi-user.target WantedBy=graphical.target
sudo chmod +x /lib/systemd/system/autossh.service #给予可执行权限 sudo systemctl enable autossh #设置开机自启 sudo systemctl start autossh #现在就启动服务 sudo systemctl status autossh #查看状态,出现Active: active (running)表示正常运行
也可以登陆到VPS(B机)上看看8388商品是否真的有程序在监听
netstat -antp | grep :8388 tcp 0 0 0.0.0.0:8388 0.0.0.0:* LISTEN 20041/sshd tcp 0 0 :::8388 :::* LISTEN 20041/sshd
4,尝试远程登陆
接下来,我们就可以在家里的电脑(C机)上登陆到位于公司NAT网络里的那台Debian8虚拟机(A机)。
ssh userA@VPS的IP -p 8388
注意:这里的userA并不是VPS(B机)上的用户,而是Debian8虚拟机(A机)上的用户。