外部网络SSH访问公司内网服务器终极解决方案(实现SFTP直连内网)

最近工作中中遇到了这样的情况,公司内部搭建了一台测试服务器作为测试环境使用。
某天请假回家,公司测试服务器出了问题,公司的小伙伴无法使用测试环境测试。
这个时候就想,能否在外部也能访问公司的服务器。

解决办法

利用外网服务器以及反向SSH搭一条通道,就可以利用外网的服务器登录内网的服务器。
两台服务器配置

名称 IP
内网服务器 192.168.0.201
外网服务器 100.100.100.100

外网服务器我用的是阿里云服务器。

建立通道

在内网服务器上执行命令

ssh -NfR 1122:localhost:22 [email protected] -p 22

其中,这条命令的意思是在后台执行(-f),不实际连接而是做port forwarding(-N),做反向ssh(-R)
将远程服务器的1122端口映射成连接本机与该服务器的反向ssh的端口。
root为外网服务器的登录名,100.100.100.100为外网IP(这里我瞎写的)

登录内网服务器

首先使用SSH登录外网服务器
然后执行以下命令就可以进行登录内网服务器了

ssh www@localhost -p1122

www是指你登录内网服务器所用的用户名

ssh连接中断问题

使用autossh保持连接

ubuntu安装autossh

sudo apt-get install autossh

centos安装autossh

yum install autossh

在内网服务器上执行autossh命令,代替之前的ssh命令

autossh -M 3322 -NfR 1122:localhost:22 [email protected] -p 22

如果还出现断线

修改外网服务器 /etc/ssh/sshd_config

ClientAliveInterval 120
ClientAliveCountMax 0

修改内网服务器 /etc/ssh/ssh_config
增加一行:

Host *
	ServerAliveInterval 15  #每隔15s向服务器发送一次 alive 请求
	GSSAPIAuthentication yes

SecureCRT跳板机直连

修改外网服务器SecureCRT的属性选项(Session Options)
点击Port Forwarding=>Add按钮添加转发

设置转发服务器

Name

可以随便填写

Local

信息是指本地直连内网服务器的地址信息(下一步SecureCRT设置需要用到)

Remote

是指外网服务器SSH登录内网服务器的地址信息(对应外网服务器登录命令:ssh www@localhost -p1122)。
这里可以理解为登录目标服务器的地址信息,也就是在跳板机可以直接登录的目标服务器,有时候为了安全,公司内部也要去使用跳板机登录线上服务器。
这里其实我们使用外网服务器作为跳板机,转发登录内网的服务器。

SecureCRT新建Session直连内网服务器

通过上方跳板机的设置,SecureCRT就可以直接使用以下IP端口连接内网服务器了

IP地址:127.0.0.1
端口:1122

账号密码就是登录内网服务器的账号密码

注意:连接内网服务器前,需先连接外网服务器(因为在外网的Session设置了Port Forwarding,没连接当然不能转发)

这个时候PhpStorm也可以通过SFTP连接内网服务器了

又可以愉快地在家里开发啦,哈哈哈~~

发布了65 篇原创文章 · 获赞 88 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/uisoul/article/details/97416567
今日推荐