有的时候出于安全考虑,真正的工作服务器是不对外提供ssh连接的,需要先登录一个跳板服务器,然后在跳板服务器上再ssh到工作服务器,每次都要输两遍ssh命令对于我这种懒人来说真是折磨啊,经过实验,总结三个一劳永逸大法。 现在假设有ABC三台机器,A是本地
有的时候出于安全考虑,真正的工作服务器是不对外提供ssh连接的,需要先登录一个跳板服务器,然后在跳板服务器上再ssh到工作服务器,每次都要输两遍ssh命令对于我这种懒人来说真是折磨啊,经过实验,总结三个一劳永逸大法。
现在假设有ABC三台机器,A是本地机器,B是跳板服务器(公网地址123.456.789.110),C是工作服务器(内网地址192.168.1.111).A可以访问B,但不能直接访问C,B可以直接访问C。
1、通过ssh端口转发命令
在B的命令行输入
ssh -CfNg -L 8833:192.168.1.111:22 userc@192.168.1.111
具体参数不解释了,不懂的可以参考http://qubaoquan.blog.51cto.com/1246748/292497。这句话的意思是当我访问B机器8833端口时,其实是在访问C的22端口
?
以后就可以直接在A机器命令行输入
ssh -p 8833 userc@123.456.789.110
就可以登录C机器了,这里要注意的是此处用户名是B登录C的用户名,而ip地址是B的ip地址,要和普通的ssh登录做区分。
这种方法和ssh翻墙原理相同,各位想fXXk GFW的童鞋可以发挥想象力。。。
2、通过proxycommand+netcat
这种方法不需要对B和C进行任何操作,只需要对A机器上的ssh_config文件做些修改就可以了
proxycommand是ssh的内置功能,而netcat更是黑客们居家旅行杀人越货必备之良品,netcat详解参考这篇博客:http://blog.csdn.net/michael493439861/article/details/7445454
回到我们需求,一般的服务器上都默认装有netcat。我们首先修改A机器上的ssh_config文件,添加这么几行
Host Cserver【随意取名】 HostName 192.168.1.111 Port 22 【C机器的ssh端口】 ProxyCommand ssh -p 9022【B机器的ssh端口】 userb@123.456.789.110 nc %h %p
然后在A机器的命令行输入
ssh userc@Cserver
见证奇迹的时刻来了。。。
3、无脑笨方法
我们知道ssh是可以直接执行远程命令的,于是,在A机器命令行输入:
ssh -t -p 9022【B机器ssh端口】 userb@123.456.789.110 "ssh userc@192.168.1.111"
?当然这还是要输入两次ssh命令,没有任何技术含量。无脑懒人可以把这个在.bashrc里面alias一下,记住要source哦。
个人感觉方法2原理上其实是方法3和方法1的结合,通过proxycommand执行远程nc命令,而这个nc命令的作用是建立一个tunnel。
声明:如未作说明,则本文为 渣滓洞【解旻的博客】 原创。转载务必注明出处。
注意:转载须保留全文,如需修改请联系作者。
本文永久地址:http://xieminis.me/?p=257