标签:
ssh程序是SSH Client中的客户程序,下面根据不同应用场景中ssh程序的使用来介绍ssh程序。
在本应用场景中,建立SSH连接,允许进行“用户登录,命令执行等”操作。
在本场景中,使用ssh程序建立SSH连接的命令如下:
ssh -l dslztx -i ~/.ssh/id_dsa -p 22 192.168.1.5
1、“-i”
指定私钥文件
2、“-p”
指定SSH Server监听端口
3、“-l”
指定SSH连接登录用户
4、“192.168.1.5”
表示SSH Server所在机器的IP地址
以上这些参数值可在“ssh_config文件”中配置,配置后内容如下:
Host RemoteHost #指定配置匹配条件
HostName 192.168.1.5
User dslztx
Port 22
IdentityFile ~/.ssh/id_dsa
现在执行ssh RemoteHost
命令,即可达到跟执行原来命令相同的效果。
在本应用场景中,建立SSH连接,将SSH连接作为隧道。在继续之前,首先进行以下几点说明:
使用SSH隧道的应用具体又可细分为4种形式,下面分别进行介绍。
在本场景中,使用ssh程序建立SSH连接的命令如下:
ssh -L [bind_address:]port:host:hostport RemoteHost
1、“port”
本地机器的端口号,被监听的应用转发端口
2、“host”
当其值为“localhost”或者“127.0.0.1”时,相当于一个“相对地址”,它的绝对地址是“RemoteHost”;否则,它的绝对地址就是“host”值。(即以“RemoteHost”为参照基准)
3、“hostport”
“host”所表示机器上的端口号
4、“bind_address”
表示只有来自“bind_address”地址的对“port”端口的访问才被允许通过SSH隧道。当“bind_address”值为“localhost”或“127.0.0.1”时,相当于一个相对地址,它的绝对地址是本地机器,表示只有来自自身的对“port”端口的访问才被允许通过SSH隧道;当“bind_address”值不为“localhost”或者“127.0.0.1”,而为特定的某个域名或者IP地址时,它的绝对地址就是“bind_address”值,表示只有来自“bind_address”地址的对“port”端口的访问才被允许通过SSH隧道;当“bind_address”值为“*”或者为空时,没有所谓的绝对地址,表示来自所有地址的对“port”端口的访问都被允许通过SSH隧道(即以“本地机器”为参照基准)
“[bind_address:]port:host:hostport”这些参数的参数值可以在“ssh_config文件”中配置,具体配置选项是“LocalForward”。
建立的SSH连接被应用作为隧道,由于SSH Client端设定被监听的应用转发端口,因此应用连接必须由本地机器上的应用程序发起建立,称为本地转发。
具体的数据流图如图1所示。
图1
有以下几点需要注意:
ssh -L [bind_address:]port:host:hostport RemoteHost
建立SSH连接隧道,设置好被监听的转发端口,转发目标地址和端口等参数在本场景中,使用ssh程序建立SSH连接的命令如下:
ssh -R [bind_address:]port:host:hostport RemoteHost
1、“port”
“RemoteHost”上的端口号,被监听的应用转发端口
2、“host”
当“host”值为“localhost”或者“127.0.0.1”时,相当于一个“相对地址”,它的绝对地址是“本地机器”;否则,它的绝对地址就是“host”值(即以本地机器为参照基准)
3、“hostport”
“host”所表示机器上的端口号
4、“bind_address”
表示只有来自“bind_address”地址的对“port”端口的访问才被允许通过SSH隧道。当“bind_address”值为“localhost”或“127.0.0.1”时,相当于一个相对地址,它的绝对地址是“RemoteHost”,表示只有来自自身的对“port”端口的访问才被允许通过SSH隧道;当“bind_address”值不为“localhost”或者“127.0.0.1”,而为特定的某个域名或者IP地址时,它的绝对地址就是“bind_address”值,表示只有来自“bind_address”地址的对“port”端口的访问才被允许通过SSH隧道;当“bind_address”值为“*”或者为空时,没有所谓的绝对地址,表示来自所有地址的对“port”端口的访问都被允许通过SSH隧道(即以“RemoteHost”为参照基准)
“[bind_address:]port:host:hostport”这些参数的参数值可以在“ssh_config文件”中配置,具体配置选项是“RemoteForward”。
建立的SSH连接被应用连接作为隧道,由于SSH Server端设定被监听的应用转发端口,因此应用连接由“RemoteHost”上的应用程序发起建立,称为远端转发。
(注意,SSH连接隧道由SSH Client发起建立,但是一旦得以建立SSH Client和SSH Server都可在SSH连接隧道上发起数据通信请求。因而“RemoteHost”上的应用程序发起建立应用连接的请求,进而由SSH Server在SSH连接隧道上发起相应的数据通信请求是可行的)
具体的数据流图如图2所示。
图2
有以下几点需要注意:
ssh -R [bind_address:]port:host:hostport RemoteHost
建立SSH连接隧道,设置好被监听的转发端口,转发目标地址和端口等参数在本场景中,使用ssh程序建立SSH连接的命令如下:
ssh -D [bind_address:]port RemoteHost
1、“port”
本地机器的端口号,被监听的动态转发端口
2、“bind_address”
表示只有来自“bind_address”地址的对“port”端口的访问才被允许通过SSH隧道。当“bind_address”值为“localhost”或“127.0.0.1”时,相当于一个相对地址,它的绝对地址是本地机器,表示只有来自自身的对“port”端口的访问才被允许通过SSH隧道;当“bind_address”值不为“localhost”或者“127.0.0.1”,而为特定的某个域名或者IP地址时,它的绝对地址就是“bind_address”值,表示只有来自“bind_address”地址的对“port”端口的访问才被允许通过SSH隧道;当“bind_address”值为“*”或者为空时,没有所谓的绝对地址,表示来自所有地址的对“port”端口的访问都被允许通过SSH隧道(即以“本地机器”为参照基准)
“[bind_address:]port”这些参数的参数值可以在“ssh_config文件”中配置,具体配置选项是“DynamicForward”。
建立的SSH连接被应用作为隧道,由于SSH Client端设定被监听的应用动态转发端口,因此应用连接必须由本地机器上的应用程序发起建立,但是跟“本地转发”不一样的是,转发目标地址和转发目标端口都根据应用协议动态获得。这被称为动态转发。
其实在动态转发的过程中,主要应用的协议是“SOCKS4”或者“SOCKS5”,而不是“SSH”,此时SSH Client和SSH Server的身份分别是SOCKS Client和SOCKS Server。(OpenSSH默认不仅支持实现了SSH协议,还支持实现了SOCKS4和SOCKS5协议)。
具体的数据流图如图3所示。
图3
有以下几点需要注意:
ssh -D [bind_address:]port RemoteHost
建立SSH连接隧道,设置好被监听的转发端口等参数在本场景中,使用ssh程序建立SSH连接的命令如下:
ssh -X RemoteHost
1、“-X”
表示允许图形界面扩展
“-X”允许图形界面扩展,可以在“ssh_config文件”中配置,具体配置选项是“ForwardX11”。
建立的SSH连接被应用连接作为隧道,允许打开SSH Server所在机器上的图形界面应用程序并在SSH Client所在机器上显示,本应用场景的另外一个称呼是建立“X11”SSH连接。
在本场景中,X Client和X Server并没有通过X Protocol直接连接传输数据,而是通过SSH连接隧道传输数据,因而也属于SSH隧道应用范畴。
具体的数据流图如图4所示。
图4
有以下几点需要注意:
ssh -X RemoteHost
建立“X11”SSH连接隧道在执行ssh命令的时候,可以加入“-v”选项,“-v”选项表示打印日志信息,这有助于我们进行调试,解决遇到的问题。最多可以加入3个“-v”选项,“-v”选项越多,表示打印的日志信息越详细。
不管是在本地转发,远端转发还是动态转发中,被监听的用来转发的端口的端口号必须大于1023(否则需要root权限),并且该端口不被其他程序所占用。
1、“bind_address”值为“*”或者“为空”中的“为空”,是指这样的形式“:port”,而不是这样的形式“port”
2、在“ssh_config文件”(在远端转发中,相应的是“sshd_config文件”)中可以配置“GatewayPorts”参数值。当该值为“yes”时,“port”等价于“*:port”;当该值为“no”时,“port”等价于“localhost:port”
3、在执行ssh命令时,加入“-g”选项,等价于“*:port”的形式
4、为了更好的可读性和更精准的定义,“bind_address”还是显式配置比较好
参考文献:
[1]man ssh
[2]http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch09_03.htm
[3]http://blog.csdn.net/dslztx/article/details/46654383
标签:
原文地址:http://blog.csdn.net/dslztx/article/details/51398344