一、ssh总结(思维导图)
SSH端口转发
解释
SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。
但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发
,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”
(tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通
道来进行传输而得名。例如,Telnet,SMTP,LDAP 这些 TCP 应用均
能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此
同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许
SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
SSH 端口转发能够提供两大功能:
• 加密 SSH Client 端至 SSH Server 端之间的通讯数据
• 突破防火墙的限制完成一些之前无法建立的 TCP 连接
应用
选项:
-f 后台启用
-N 不打开远程shell,处于等待状态
-g 启用网关功能
-L 本地转发
-R 远程转发
-D 动态端口转发
-X X协议转发
本地转发:
远程转发:
动态端口转发:
X 协议转发
1.端口转发——本地转发
本地转发:
-L localport:remotehost:remotehostport sshserver
外部为客户端,内部为服务端;必须打开防火墙的ssh端口
示例
ssh –L 9527:telnetsrv:23 -N sshsrv
telnet 127.0.0.1 9527
解释:
当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
数据流向
data <---> localhost:9527 <---> localhost:XXXXX <---> sshsrv:22 <---> sshsrv:YYYYY <---> telnetsrv:23
2.端口转发——远程转发
远程转发:
-R sshserverport:remotehost:remotehostport sshserver
防火墙内部是客户端,外部是服务端;
防火墙策略(可以出,不可近)不必进行更改
· 命令在内部的ssh主机上敲
示例:
ssh –R 9527:telnetsrv:23 –N sshsrv
让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh
解释:
服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
数据流向:
Data <---> sshsrv:9527 <---> sshsrv:22 <---> localhost:XXXXX <---> localhost:YYYYY <---> telnetsrv:23
3.端口转发——动态端口转发&X协议转发
动态端口转发
动态端口转发:
当用firefox访问internet时,本机的1080端口做为代理服务器, firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
在本机firefox设置代理socket proxy:127.0.0.1:1080
ssh -D 1080 root@sshserver
X协议转发
X 协议转发
所有图形化应用程序都是X客户程序
• 能够通过tcp/ip连接远程X服务器
• 数据没有加密机,但是它通过ssh连接隧道安全进行
ssh -X user@remotehost gedit
remotehost主机上的gedit工具,将会显示在本机的X服务器上
传输的数据将通过ssh连接加密
注意:
c/s和ssh的c/s相反
二、实验——本地转发
1.前提:
主机 A和B可相互通过ssh服务访问,B和C可相互通过telnet访问;但是 A 不可以访问C
2.实现方式:
A使用B当作跳板,访问C(安全访问)
A--B 走ssh协议,在ssh协议内封装telnet协议
B--C 走telnet协议,B替A访问
3.准备
将A的ip地址加入C的防火墙策略
iptables -A INPUT -s 172.17.0.116 -j REJECT
4.实验
开启C的telnet服务
#在Centos7上
systemctl -l status telnet.socket
在centos6上
1.先开启 xinet服务
service xinetd start
2.再修改/etc/xinetd.d/telnet
distable yes 改为no
3.chkconfig telnet on
在A主机上
#访问9527 端口时:去访问172.17.16.2的23端口;通过与172.17.1.116的隧道
ssh -L 9527:172.17.16.2:23 -fN 172.17.1.116
#访问自己的9527端口
telnet 127.0.0.1 9527
三、实验——远程转发
前提
A ——>防火墙 | B<–> C
A 主机在防火墙外;B C在防火墙内;A不能通过22端口穿过防火墙
防火墙关闭22端口
思路:
B访问A ,建立隧道;B作为ssh客户端,A作为ssh服务端
实验
在B主机
# 建立与172.17.0.116之间的隧道;转发172.17.0.116 的9527 到 172.17.16.2的23端口
ssh -R 9527:172.17.16.2:23 -fN 172.17.0.116
在A主机
telnet 127.0.0.1 9527
四、实验——动态转发
A不能访问C(或者其他地址例如谷歌) ;可以使用B做代理;去访问不能访问的目标
实验
在A上
#访问本机的1080时,是使用172.17.1.116做代理
ssh -D 1080 -fN 172.17.1.116
#通过本机的socks5(1080端口) ;访问172.17.0.116
curl --socks5 127.0.0.1 172.17.0.116