说明:
需要从外网直接登录外部机房里只有私有ip的服务器。具体如下:
A:公司的pc,装有xshell
B:外网服务器,有公网ip和内网ip
C:外网服务器,仅有内网ip
即A需要直接登陆只有内网ip的C服务器。
原理:
具体原理是通过在A先连接B服务器上,A在本地开tunneling,监听127.0.0.1:1080端口(127.0.0.1:1080跟B服务器是连接的);主机A将连接C服务器的所有网络请求都先发到的本地的1080端口,通过B服务器转发到C服务器。所以在使用的时候需要先用主机A连接B服务器。
具体:
1. B服务器上开启tunneling
xshell,打开B服务器会话属性,connection | ssh | tunneling,点击add创建forwarding rule。内容如下
主要是2个,type选择dynamic(socks4/5),description随便写,如这里的tunneling
2. 在主机A的连接C服务器的xshell会话上,设置proxy,这里C服务器是指coolnull
connection | proxy | browse | add创建一个proxy,具体填写如下
name这个随便写,我是直接写tunneling,type选择socks5,host选择127.0.0.1,port选择上一步填写的1080。
3. 在主机A上先连接B服务器,不要断开,然后这时在主机A xshell上打开C服务器的会话,同上C服务器是指coolnull
在C服务器上打w,就可以看到登陆的ip是我们B服务器的ip
查看:
xshell上view | 勾选tunneling pane,就可以看到转发的情况,当然登陆服务器的时候也能看得到啦
可以最下面channel那可以看到,是通过127.0.0.1:56831转发到127.0.0.1:1080,发送给B服务器,再转发到C服务器的
附录:
附录1:
其实,之前已经在B服务器上架设了vpn了,连上B的vpn就可以登陆C服务器了。但同事嫌所有网络都走vpn,速度不快。钱少,vpn服务器带宽也小,没办法。
附录2:
看到这个,就该知道这方法有个不好的地方,每次连接都需要先连接B服务器,才能连接其它服务器。而且使用过程中B服务器连接不能中断。
晚点更新另一篇文章,在B服务器上安装apache,通过mod_proxy模块,将主机A访问C服务器的ssh请求通过B服务器的80端口转发到C服务器。