建立ssh隧道
时间:2010-05-25 来源:szxsztszk
建立ssh隧道的工具:
unix: ssh
windows: plink myenttunnel
SSH 是一种安全的传输协议,用在连接服务器上比较多。不过其实除了这个功能,它的隧道转发功能更是吸引人。
1.建立代理服务器
firewall
|
|
me:7070 —— |—-ssh server ——> internet
plink -f -N [email protected] -D 7070
ssh -f -N [email protected] -D 7070
工 作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持SOCKS4 协议, ssh 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
[email protected]是ssh登录的用户名和地址
-f 表示在后台执行
-D 表示dynamic port forwarding, 将ssh作为SOCKS代理服务器,在本机监听7070端口
-N 表示不需要交互操作,也就是说登录ssh后不启动shell
这个-N参数只支持ssh的protocol version 2
然后 设置浏览器代理就OK了.
2.与服务器之间建立起一条加密通道
————
| internet |
me:21 — —– | | ———> 内网ftp server :21
————-
plink -N [email protected] -L 21:localhost:21
ssh -N [email protected] -L 21:localhost:21
L 表示Local port forwarding 本地端口转发
21:localhost:21 表示本地的pc机的21端口转发到服务器(vpn.dugoo.net)上的localhost:21这个端口
访问本机的21端口就等于访问服务器上的ftp服务了,而且是经过加密的
$ftp localhost 21
其实FTP的加密通道早就有了,就是SFTP。
3.穿过防火墙,访问内网的服务
firewall
|
|
me:8801 ——- | —- ssh server ——> 内网MySQL :3306
因为防火墙限制,无法直接访问防火墙后的内网的其它机器! 如果想访问内网服务,就要有服务器对外提供ssh登录服务,就OK了!!
比如要访问MySQL数据库
plink -N [email protected] -L 8801:192.168.1.123:3306
ssh -N [email protected] -L 8801:192.168.1.123:3306
将本机8801转发到内网 192.168.1.123监听器端口3306,我就可以很方便的从本机直接登录内网数据库了
注意:这里是不通过套接字连接服务器,而是 通过tcp/ip来连接服务器,故要建立一个tcp/ip连接,需用127.0.0.1代替locahost作为-h参数的值来连接服务器。
$mysql -h 127.0.0.1 --port=8801 -utestuser -p
4.穿过防火墙,让内网机器访问我的服务
firewall
|
me :80 <—– |——– ssh server <——- 内网:8080
前面的都是Local port forwarding本地端口转发,Remote port forwarding和它正好相反,是将远端端口转发到本地
比如,在本机建立了一个http服务器,想从内网的访问到我的http服务器
plink -N [email protected] -R 8080:localhost:80
ssh -N [email protected] -R 8080:localhost:80
将ssh server上的8080转发到本机的localhost:80上ssh server,就可以访问我的http服务啦
要让内网其它机器也能访问,一定要打开ssh的GatewayPorts参数, 重启sshd服务,使修改的参数生效
#vi /etc/ssh/sshd_config
修改为
GatewayPorts yes
从 内网任何一台机器都能访问.
unix: ssh
windows: plink myenttunnel
SSH 是一种安全的传输协议,用在连接服务器上比较多。不过其实除了这个功能,它的隧道转发功能更是吸引人。
1.建立代理服务器
firewall
|
|
me:7070 —— |—-ssh server ——> internet
plink -f -N [email protected] -D 7070
ssh -f -N [email protected] -D 7070
工 作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口,一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持SOCKS4 协议, ssh 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.
[email protected]是ssh登录的用户名和地址
-f 表示在后台执行
-D 表示dynamic port forwarding, 将ssh作为SOCKS代理服务器,在本机监听7070端口
-N 表示不需要交互操作,也就是说登录ssh后不启动shell
这个-N参数只支持ssh的protocol version 2
然后 设置浏览器代理就OK了.
2.与服务器之间建立起一条加密通道
————
| internet |
me:21 — —– | | ———> 内网ftp server :21
————-
plink -N [email protected] -L 21:localhost:21
ssh -N [email protected] -L 21:localhost:21
L 表示Local port forwarding 本地端口转发
21:localhost:21 表示本地的pc机的21端口转发到服务器(vpn.dugoo.net)上的localhost:21这个端口
访问本机的21端口就等于访问服务器上的ftp服务了,而且是经过加密的
$ftp localhost 21
其实FTP的加密通道早就有了,就是SFTP。
3.穿过防火墙,访问内网的服务
firewall
|
|
me:8801 ——- | —- ssh server ——> 内网MySQL :3306
因为防火墙限制,无法直接访问防火墙后的内网的其它机器! 如果想访问内网服务,就要有服务器对外提供ssh登录服务,就OK了!!
比如要访问MySQL数据库
plink -N [email protected] -L 8801:192.168.1.123:3306
ssh -N [email protected] -L 8801:192.168.1.123:3306
将本机8801转发到内网 192.168.1.123监听器端口3306,我就可以很方便的从本机直接登录内网数据库了
注意:这里是不通过套接字连接服务器,而是 通过tcp/ip来连接服务器,故要建立一个tcp/ip连接,需用127.0.0.1代替locahost作为-h参数的值来连接服务器。
$mysql -h 127.0.0.1 --port=8801 -utestuser -p
4.穿过防火墙,让内网机器访问我的服务
firewall
|
me :80 <—– |——– ssh server <——- 内网:8080
前面的都是Local port forwarding本地端口转发,Remote port forwarding和它正好相反,是将远端端口转发到本地
比如,在本机建立了一个http服务器,想从内网的访问到我的http服务器
plink -N [email protected] -R 8080:localhost:80
ssh -N [email protected] -R 8080:localhost:80
将ssh server上的8080转发到本机的localhost:80上ssh server,就可以访问我的http服务啦
要让内网其它机器也能访问,一定要打开ssh的GatewayPorts参数, 重启sshd服务,使修改的参数生效
#vi /etc/ssh/sshd_config
修改为
GatewayPorts yes
从 内网任何一台机器都能访问.
相关阅读 更多 +