最近工作中中遇到了这样的情况,公司内部搭建了一台测试服务器作为测试环境使用。
某天请假回家,公司测试服务器出了问题,公司的小伙伴无法使用测试环境测试。
这个时候就想,能否在外部也能访问公司的服务器。
解决办法
利用外网服务器以及反向SSH搭一条通道,就可以利用外网的服务器登录内网的服务器。
两台服务器配置
名称 | IP |
---|---|
内网服务器 | 192.168.0.201 |
外网服务器 | 100.100.100.100 |
外网服务器我用的是阿里云服务器。
建立通道
在内网服务器上执行命令
ssh -NfR 1122:localhost:22 root@100.100.100.100 -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 root@100.100.100.100 -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连接内网服务器了
又可以愉快地在家里开发啦,哈哈哈~~