本文最后更新于:2020年10月7日 晚上
最近实验室给我分配了服务器账号,但该服务器的ip在实验室的局域网中,不是公网ip,无法在宿舍(外网)访问该服务器(但是该服务器可以访问公网)。我希望能在公网访问到实验室的服务器,于是学习配置了ssh远程端口转发(内网穿透),使用ssh -R可以轻松做到这个事情。在实现过程中遇到了很多坑,特此总结记录一下。
背景:一台服务器A(位于内网)、一台云虚拟主机B(有公网ip,外网可访问)。
目的:实现从外网访问服务器A。
配置反向端口转发
ssh -R命令的用法:ssh -R 远程地址:远程端口:目标地址:目标端口 user_name@ssh服务器
ssh -R HostC:PortC:HostB:PortB user@HostC
将本机可以访问到的HostB:PortB转发到 HostC的PortC端口,其中第一个HostC可以省略。
例如:我想将本机的22端口映射到远程云主机的8888端口,则执行如下命令:
ssh -N -R 8888:localhost:22 root@htx1998.cn
其中 -R:反向端口转发; -N :不执行远程命令,只做端口转发; -f 表示在后台运行;
在服务器A上执行上述命令后,就成功的将服务器A的22端口(用于ssh访问)反向转发到了htx1998.cn的8888端口,只要保持这个ssh不断,任何一台机器就能以htx1998.cn为跳板,通过ssh serveruser@htx1998.cn -p 8888 来连接到服务器A的22端口。
不过这样做可能并不稳定,若网络存在波动导致ssh -R的连接终端,则会失去控制。有个叫autossh的软件,可以自动的检测断线,并在断线的时候重连。
安装 autossh :
sudo apt-get install autossh
安装完后,使用autossh代替ssh重新执行上述命令
autossh -NfR 8888:localhost:22 root@htx1998.cn
这里需要注意,由于使用-f 参数使该命令后台运行,导致无法输入远程云主机的密码,故需要配置公钥访问(详见后文)。
最终,在踩完下文的坑后,执行上述命令即可实现从外网以ssh serveruser@htx1998.cn -p 8888访问服务器A。
坑:打开ssh隧道 应监听0.0.0.0,而不是127.0.0.1
在配置完反向端口转发后,发现在外网不能访问8888端口,查看云虚拟主机的防火墙配置,已经添加了8888端口的规则,依然提示connection refused。但登录云主机后,可以使用localhost:8888登录到服务器A,这就说明端口转发已经起作用了!
netstat -anop | grep 8888
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 1069/sshd: root off (0.00/0/0)
通过以上命令查看,发现8888端口是监听在127.0.0.1本地回环网卡上的,只能在本地服务器访问,无法从外部访问。需要将8888端口的监听地址设为0.0.0.0才行。
修改vim /etc/ssh/sshd_config (在外网服务器配置)
添加GatewayPorts yes
service sshd restart即可
配置公钥访问服务器:
在客户端用ssh-keygen -t rsa 生成公钥和私钥,一路回车,保存在root/.ssh/
scp id_rsa.pub root@server:/root 把公钥上传到服务器
cat id_rsa.pub >>/root/.ssh/authorized_keys 将上传的公钥追加到authorized_keys的末尾
chmod 600 authorized_keys 更改权限
至此,实现免密码登录
常用命令:
netstat -aptn :查看当前开放的端口
lsof -i:8888 :查看端口占用状态
netstat -anop | grep 8888 :看8888端口是否监听
iptables —list :看是否有系统防火墙限制
telnet ip port :测试远程服务器端口是否开启
ps -aux | grep 8888 :查看含有8888的进程
参考文献:
https://blog.csdn.net/autoliuweijie/article/details/80283689
https://zhuanlan.zhihu.com/p/57630633
https://blog.csdn.net/u012911347/article/details/80765894
https://blog.csdn.net/qm5132/article/details/83039405
https://www.jianshu.com/p/7f5f727a2b60
https://blog.csdn.net/dreams_deng/article/details/78968416