ssh跳板登录懒人大法

原创
2016-06-07 16:31:26 1201浏览

有的时候出于安全考虑,真正的工作服务器是不对外提供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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。