ssh的使用技巧

【前言】

最近一直在使用ssh协议的端口转发(隧道)功能,完成对内网空透等。这篇文章将主要讲解3种经常使用的ssh tunnelling使用方法和基本原理。web

在介绍具体内容前,我先奉上端口转发的经常使用情景:vim

图中的“我”,如今是要访问内部网站的192.168.1.0/24网段里面的服务器,然而因为不在一个网段,我是不能够直接ssh到内部网络的服务器。服务器

一般的作法是先ssh到“SSH Server”,而后再在ssh server上访问内部网站的服务器网络

我能不能不用上ssh server就直接ssh到内部服务器呢?从下面的文章你将获得答案。ssh

 

SSH 端口转发主要有3种方式:网站

  • 本地端口转发

格式以下:代理

ssh -L [bind_address:]port:host:hostport <user>@<ssh server>

如上图我如今要直接访问IP地址为192.168.1.2的服务器,能够在本地(SSH Client)这样作:rest

Step 1:code

 

ssh -N -L 11122:192.168.1.2:22 peter@10.1.1.1

或者:server

ssh -N -L 10.10.10.10:11122:192.168.1.2:22 peter@10.1.1.1
# 若是你想绑定本机特定的IP能够在port前加上IP地址,如上面的10.10.10.10

注意:peter是SSH Server上的一个用户名,“-N” 表示不执行命令,也就是不登陆到SSH Server上去。

输入SSH Server密码,命令会等在那,不要结束这个就行

Step 2:

 

ssh -p 11122 <192.168.1.2的用户名>@127.0.0.1

或者:

ssh -p 11122 <192.168.1.2的用户名>@10.10.10.10

 

输入192.168.1.2服务器的密码,就登陆了内部网络的192.168.1.2的机器了。

原理分析:

当你执行Step 1的命令时,ssh client程序会在本地监听指定的11122端口,你能够经过下面命令看到

netstat -ntlp |grep 11122

而后咱们在Step 2中,咱们ssh其实链接的是本地的11122端口,ssh client程序会帮咱们转发到SSH Server的,而后SSH Server再帮咱们转发到咱们指定的192.168.1.2上的22端口


 

  • 远程端口转发

格式以下:

ssh -R [bind_address:]port:host:hostport <user>@<ssh server>

与 “本地端口转发”最大的不一样是,这个命令后,绑定的端口不在是本地的端口,而是SSH Server(10.1.1.1/192.168.1.1)上的端口

注意:因为默认配置下,远程SSH Server只能绑定到127.0.0.1地址上,因此SSH Server之外的机器是不能使用到这个端口转发的,解决方法:

用sudo权限打开SSH Server上的/etc/ssh/sshd_config: sudo vim /etc/ssh/sshd_config ,加入 

GatewayPorts yes

而后重启ssh service: sudo service ssh restart

Step 1:

ssh -N -R *:11122:10.10.10.11:22 peter@10.1.1.1

*是用来表示使用SSH Server的全部地址,你也可使用10.1.1.1这个地址,其中10.10.10.11是我上图 SSH Client同网络的其余客户端机器的IP.

Step 2:

ssh -p 11122 <192.168.1.2上的用户>@10.1.1.1

注意,跟本地端口转发不一样的是,上面的地址和端口都是远程SSH Server的。

192.168.1.X 网络的机器就经过gateway与ssh client之间的SSH隧道访问到了10.10.10.X网络的IP:10.10.10.11

 

  • 动态端口转发

格式以下:

ssh -D [bind_address:]port <user>@<ssh server>

 

前面我介绍的两种方式都有一个比较大的问题,只能作到点对点的代理,或者说一个主机的port到另外一个主机port上的映射,

动态端口就是用来解决这个问题的,完成从点到面的代理,或者说完成本机一个port到任意远程地址和端口的映射

一个比较典型的应用就是web代理服务器,下面咱们准备把SSH Server变成一个web代理服务器

Step 1:

ssh -N -D 3456 peter@10.1.1.1

注意:如今SSH Client的3456就被用来转发http请求了

Step 2:

 设置Firefox使用本地127.0.0.1的3456端口来作http代理,以下图设置:


 注意上图,必定要选择SOCK5 或者SOCK4,由于ssh只能做为SOCK主机而不是通常的HTTP主机代理

这样,咱们就可使用SSH Server的代理,用Firefox来访问全部的页面了。

相关文章
相关标签/搜索