0%

ssh应用实例

一、简单例子

1.1、本地转发(bind_address=localhost,host=localhost)

1.1.1、环境设定

现在有机器A和机器B,A中运行SSH Client,B中运行SSH Server,在B中运行着Mysql服务,监听端口为3306。在A中的ssh_config文件中已经配置好“Host,HostName,User,Port,IdentityFile”。

1.1.2、具体应用

可以建立一个SSH连接的本地转发,使得监听A中的5010端口,将传输给该端口的数据通过A和B之间的SSH隧道转发给B中的3306端口,即访问A中的5010端口就能够访问B中的3306端口,这样子就能使用B的Mysql服务。(这里限制只有来自于A自身的对5010端口的访问才被允许通过SSH隧道,即设置“bind_address=localhost”)
A中建立SSH连接的命令如下:

1
ssh -L localhost:5010:localhost:3306 B  

1.2、远端转发(bind_address=localhost,host=localhost)

1.2.1、环境设定

现在有机器A和机器B,A处于公司内部网络中,没有自身的对外IP地址,B具有自身的对外IP(即A能够直接访问B,而B不能够直接访问A)。A中运行SSH Client,B中运行SSH Server,A中运行Mysql服务,监听端口为3306。在A中的ssh_config文件中已经配置好“Host,HostName,User,Port,IdentityFile”。

1.2.2、具体应用

可以建立一个SSH连接的远端转发,使得监听B中的5010端口,将传输给该端口的数据通过A和B之间的SSH隧道转发给A中的3306端口,即访问B中的5010端口就能够访问A中的3306端口,这样子就能使用A的Mysql服务。(这里限制只有来自于B自身的对5010端口的访问才被允许通过SSH隧道,即设置“bind_address=localhost”)
A中建立SSH连接的命令如下:

1
ssh -R localhost:5010:localhost:3306 B  

1.3、动态转发(bind_address=localhost)

1.3.1、环境设定

现在有机器A和B,A处于某个防火墙内,不能访问有些网页,B处于防火墙之外,能够访问所有网页。A中运行SSH Client,B中运行SSH Server。在A中的ssh_config文件中已经配置好“Host,HostName,User,Port,IdentityFile”。

1.3.2、具体应用

可以建立一个SSH连接的动态转发,使得监听A中的5010端口,将传输给该端口的数据通过A和B之间的SSH隧道转发给B,在B处根据应用协议动态决定数据转发的目的地和目的端口,比如http://www.youtube.com:80。即将数据请求传递给A中的5010端口,该数据请求被转发给B,B会根据应用协议动态决定数据请求转发的目的地和目的端口,以B的身份去进行数据请求,然后将返回得到的数据传输给“将数据传递给A中的5010端口的应用程序”。(这里限制只有来自于A自身的对5010端口的访问才被允许通过SSH隧道,即设置“bind_address=localhost”)
A中建立SSH连接的命令如下:

1
ssh -D localhost:5010 B  

1.4、“X11”SSH连接

1.4.1、环境设定

现在有机器A和机器B,A中运行SSH Client,B中运行SSH Server,B中的sshd_config文件中配置允许建立“X11”SSH连接。
在A中的ssh_config文件中已经配置好“Host,HostName,User,Port,IdentityFile”。

1.4.2、具体应用

可以建立一个“X11”SSH连接,使得能够打开B中的图形界面应用程序,并在A中显示,数据通过A和B之间的SSH隧道传输。
A中建立SSH连接的命令如下:

1
ssh -X B  

1.5、本地转发(bind_address=localhost,host=非localhost)

1.5.1、环境设定

现在有机器A,B和C,A中运行SSH Client,B中运行SSH Server,C中运行Mysql服务,监听端口为3306,A跟C不能直接连接,A跟B能够直接连接,B跟C能够直接连接。在A中的ssh_config文件中已经配置好“Host,HostName,User,Port,IdentityFile”。

1.5.2、具体应用

可以建立一个SSH连接的本地转发,使得监听A中的5010端口,将传输给该端口的数据通过A和B之间的SSH隧道转发给C中的3306端口,即访问A中的5010端口就能够访问C中的3306端口,这样子就能使用C的Mysql服务。(这里限制只有来自于A自身的对5010端口的访问才被允许通过SSH隧道,即设置“bind_address=localhost”)
A中建立SSH连接的命令如下:

1
ssh -L localhost:5010:C:3306 B  

1.6、远端转发(bind_address=非localhost,host=非localhost)

1.6.1、环境设定

现在有A,B,C和D四台机器,在这四台机器的两两关系中,只有“A与B”和“C与D”能够直接连接,另外还有“半个连接”,即B处于公司内部网络中,没有自身的对外IP地址,C具有自身的对外IP(即B能够直接访问C,而C不能够直接访问B)。在B中运行SSH Client,在C中运行SSH Server,在A中运行Mysql服务,监听3306端口。在B中的ssh_config文件中已经配置好“Host,HostName,User,Port,IdentityFile”。

1.6.2、具体应用

可以建立一个SSH连接的远端转发,使得监听C中的5010端口,将传输给该端口的数据通过B和C之间的SSH隧道转发给A中的3306端口,即在D中访问C中的5010端口就能够访问A中的3306端口,这样子就能使用A的Mysql服务。(要设定允许D可以访问C中的5010端口,可以配置“bind_address=D”或者“bind_address=*”)
B中建立SSH连接的命令如下:

1
2
3
4
5
6
7
ssh -R D:5010:A:3306 C  
或者
ssh -R *:5010:A:3306 C
或者
ssh -R :5010:A:3306 C
或者
ssh -g -R 5010:A:3306 C

二、复杂例子

2.1、环境设定

现在有机器A和B,A处于公司内部网络中,没有自身的对外IP地址,B具有自身的对外IP(即A能够直接访问B,而B不能够直接访问A)。A中运行SSH Client和SSH Server,B中运行SSH Client和SSH Server。在A中的ssh_config文件中已经配置好“Host,HostName,User,Port,IdentityFile”。A中的SSH Server监听端口为22。

2.2、具体应用

可以建立一个SSH连接的远端转发,使得监听B中的5010端口,将传输给该端口的数据通过A和B之间的SSH隧道转发给A中的22端口,即访问B中的5010端口就能够访问A中的22端口,这样子就能使用A的SSH Server服务。(这里限制只有来自于B自身的对5010端口的访问才被允许通过SSH隧道,即设置“bind_address=localhost”)
A中建立SSH连接的命令如下:

1
ssh -R localhost:5010:localhost:22 B  

然后在B中,执行如下命令:

1
ssh -p 5010 -l loginuser -i identityfile A  

当然这些参数可以在B中的ssh_config文件中通过“Host,HostName,User,Port,IdentityFile”配置。

2.3、总结

以上是两层SSH连接,第一层SSH连接的身份是隧道,第二层SSH连接的身份是应用连接。
不过可以再增加第三层应用,此时第一层和第二层SSH连接的身份都为隧道。

您的支持将鼓励我继续分享!