[ubuntu入门手册]-18-SSH端口转发

引言

这篇文章介绍三种SSH端口转发方式,分别是动态端口转(fan)发(qiang),本地端口转发和远程端口转发,分别适用于不同网络环境。

文章目录

0×1.SSH动态端口转发

SSH动态端口转发工作原理介绍:

配置SSH动态端口转发,将在本地创建一个 SOCKS 代理服务端口,指向远程SSH服务器,这样就在本地和远程SSH服务器之间建立了一条SSH安全通道;在本地浏览器配置SOCKS代理指向这个本地端口,浏览器的所有访问请求将通过此端口转发给远程SSH服务器,SSH服务器接收这些请求后,代替请求者去访问这些需要浏览的页面,然后将页面数据通过已经建立的SSH安全通道返回给请求者,从而让本地能够显示这些页面内容,SSH动态端口转发能保证本地到SSH服务器的数据安全传输,但不能保证SSH服务器到实际浏览页面所在服务器之间的数据安全传输,除非它们之间也使用了加密连接。

SSH动态端口转发实例:

实验需求:
1)已经在墙外的SSH服务器
2)火狐浏览器
3)火狐插件"FoxyProxy Standard"

					#1.打开终端,配置去往SSH服务器的SOCKS代理端口
					#-D代表这是一个SOCKS代理端口,本地端口号8899
					#qing是远程SSH服务器中的用户,192.168.1.233是SSH服务器的IP地址
					#参数解释:
					#-f 后台执行命令 (可选)
					#-N 不执行远程命令 (可选)
					#-q 安静模式,不显示警告和诊断信息(可选)
					#-T 禁用伪tty分配(可选)
					#-n 如果添加了-f最好使用这个参数
					qing@qingsword:~$ ssh -qTfnN -D 8899 qing@192.168.1.233

					#2.输入SSH服务器上qing用户对应的密码,SSH连接完成,此时已经在本地和SSH服务器之间开启了一条数据转发通道。
					

打开火狐浏览器,搜索插件并安装"FoxyProxy Standard";

ssh-dynamic-forward-1

安装后,添加一条配置,使用刚才创建的SOCKS端口;

ssh-dynamic-forward-2 ssh-dynamic-forward-3 ssh-dynamic-forward-4

这样就配置好了一个随时可用的转(fan)发(qiang)环境,不需要使用时只要选择"完全禁用FoxyProxy",再结束后台的ssh连接即可。

0×2.SSH本地端口转发

假设有三台计算机A(192.168.1.100)、B(192.168.1.101)、C(192.168.1.102),A作为客户端,C是服务端,A想要SSH连接C,必须先SSH连接到B,通过B才能SSH连接到C,但每次这样操作十分麻烦,这时就可以在B上配置SSH本地端口转发,让B的指定端口的数据直接发给C,之后,A只需要SSH连接B的这个指定端口,就能直接连接到C,请看下面的演示:

					#1.在B上配置SSH本地端口转发
					#-L参数指定这是一条本地SSH转发,其后的命令格式
					#[本地端口]:[SSH服务器IP]:[SSH服务器上开启的SSH服务端口号]
					#qing@192.168.1.102,SSH服务器IP和用来连接的用户名
					# -g参数允许远程主机连接到本地的这个转发端口,不配置远程主机无法连接,只能本地连接
					qingB@B.qingsword.com:~$ ssh -gNnf -L 23333:192.168.1.102:22 qingC@192.168.1.102

					#首次连接会接收一个Key,输入yes,随后输入SSH服务器上对应用户名的密码即可完成连接

					#2.在A上连接B的23333端口(IP虽然是B的,但@前面的用户名要是C中的用户,想登陆C中哪个账户的SSH,就写上对应的用户名,输入的连接密码也应该是C中对应账户的密码)
					qingA@A.qingsword.com:~$ ssh -p 23333 qingC@192.168.1.101

					#注意:如果开启了iptables等防火墙,请将对23333入站连接设置成允许,否则很有可能连接失败
					

这种方法可以用来将数据转发到指定的任意端口,而不局限于22号端口。

0×3.SSH远程端口转发

假设有两台计算机A(192.168.1.100)、B(10.10.10.10),A是内网计算机,B是外网计算机,B不能直接访问A,但A能直接访问B,此时可以通过在A上安装openssh-server服务,使用远程端口转发,将本地的指定端口映射到B的指定端口,从而使得访问B上的这个端口就能直接访问A上的指定端口,请看下面的演示:

					#1.A和B都需要安装openssh-server
					qing@qingsword.com:~$ sudo apt-get install openssh-server

					#2.在A上执行远程端口转发
					#-R开启远程端口转发
					#[远程开启端口]:本地主机IP:[本地主机端口]
					#qingB@10.10.10.10,使用qingB这个账户连接B
					qingA@A.qingsword.com:~$ ssh -fNn -R 22222:localhost:22 qingB@10.10.10.10

					#3.连接完成后,在B上将会开启22222号端口,B可以使用自己的这个端口访问到A的22号端口(虽然是访问的localhost,但是@前的登陆用户名应该是A的用户,因为访问B的22222就等于访问A的22)
					qingB@B.qingsword.com:~$ ssh -p 22222 qingA@localhost

					#4.如果想让其他计算机可以通过B的22222号端口访问A,还需要在B上再添加一条本地转发,指定一个对外开放的端口(例如23333),将访问此端口的数据转发给自己的22222号端口
					qingB@B.qingsword.com:~$ ssh -gNnf -L 23333:localhost:22222 qingB@localhost

					#5.此时在第三台计算机上,只需要访问B的23333号端口即可连上A的22号端口(访问B的23333号端口就等于访问B的22222号端口,而此端口又将数据转发给A的22号端口,所以@前面要用A的账户名)
					qingC@C.qingsword.com:~$ ssh -p 23333 qingA@10.10.10.10