外部网络SSH访问公司内网服务器终极解决方案(实现SFTP直连内网)
最近工作中中遇到了这样的情况,公司内部搭建了一台测试服务器作为测试环境使用。
某天请假回家,公司测试服务器出了问题,公司的小伙伴无法使用测试环境测试。
这个时候就想,能否在外部也能访问公司的服务器。
解决办法
利用外网服务器以及反向SSH搭一条通道,就可以利用外网的服务器登录内网的服务器。
两台服务器配置
名称IP
内网服务器
192.168.0.201
外网服务器
100.100.100.100
外网服务器我用的是阿里云服务器。
建立通道
在内网服务器上执行命令
ssh -NfR 1122:localhost:22 root@100.100.100.100 -p 22
其中,这条命令的意思是在后台执行(-f),不实际连接而是做port (-N),做反向ssh(-R)
将远程服务器的1122端口映射成连接本机与该服务器的反向ssh的端口。
root为外网服务器的登录名,100.100.100.100为外网IP(这里我瞎写的)
登录内网服务器
首先使用SSH登录外网服务器
然后执行以下命令就可以进行登录内网服务器了
ssh www@localhost -p1122
www是指你登录内网服务器所用的用户名
ssh连接中断问题
使用保持连接
安装
sudo apt-get install autossh
安装
yum install autossh
在内网服务器上执行命令,代替之前的ssh命令
autossh -M 3322 -NfR 1122:localhost:22 root@100.100.100.100 -p 22
如果还出现断线
修改外网服务器 /etc/ssh/
ClientAliveInterval 120
ClientAliveCountMax 0
修改内网服务器 /etc/ssh/
增加一行:
Host *ServerAliveInterval 15 #每隔15s向服务器发送一次 alive 请求GSSAPIAuthentication yes
跳板机直连
修改外网服务器的属性选项( )
点击Port =>Add按钮添加转发
设置转发服务器
Name
可以随便填写
Local
信息是指本地直连内网服务器的地址信息(下一步设置需要用到)
是指外网服务器SSH登录内网服务器的地址信息(对应外网服务器登录命令:ssh www@ -p1122)。
这里可以理解为登录目标服务器的地址信息,也就是在跳板机可以直接登录的目标服务器,有时候为了安全,公司内部也要去使用跳板机登录线上服务器。
这里其实我们使用外网服务器作为跳板机,转发登录内网的服务器。
新建直连内网服务器
通过上方跳板机的设置,就可以直接使用以下IP端口连接内网服务器了
IP地址:127.0.0.1
端口:1122
账号密码就是登录内网服务器的账号密码
注意:连接内网服务器前,需先连接外网服务器(因为在外网的设置了Port ,没连接当然不能转发)
这个时候也可以通过SFTP连接内网服务器了
又可以愉快地在家里开发啦,哈哈哈~~