ssh隧道常用
1. 记录一个草稿
参考文献 :
http://codelife.me/blog/2012/12/09/three-types-of-ssh-turneling/
https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html
主机定义 :
- serverA: 10.0.1.11
- serverB: 10.0.1.12
- serverC: 172.16.110.11
- serverD: 172.16.110.12
2. 本地转发
命令格式
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
2.1. 隧道搭建(serverA 执行)
# -L 表示使用本地转发建立隧道
# -N 表示不执行远程命令
# -f 表示运行到后台
# -g 开启网关功能,serverA中的所有ip都将会被监控
# 整段意思表示 在本地(serverA)主机上建设一个到serverB的隧道,使用本地端口转发模式,监听本地(serverA)的9022端口,当访问本地(serverA)的9022端口时,会将通信数据转发到serverB的22端口
[root@00 ~]# ssh -N -f -L 9022:10.0.1.12:22 root@10.0.1.12 # ssh -N -f -L 127.0.0.1:9022:10.0.1.12:22 root@10.0.1.12
2.2. 隧道连接(serverA 执行)
ssh root@127.0.0.1 -P9022
3. 远程端口转发
(内网穿透)
例如: serverB 可以连接serverC, 但serverC 不能访问serverB , serverC 和 serverD 可以相互访问,若 serverD(或serverC) 需要访问serverB的ssh服务
命令格式
ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
3.1. 隧道搭建(serverB 执行)
# -N 表示不执行远程命令
# -R 表示创建远程转发的ssh隧道
# serverB(10.0.1.12)上执行 ,将会在远程主机serverC(172.16.110.11)上生成隧道端口(9022)的监听
ssh -N -R 9022:10.0.1.12:22 root@172.16.110.11
# serverB(10.0.1.12)上执行 ,将会在远程主机serverC(172.16.110.11)上生成隧道端口(9023)的监听
ssh -N -R 9023:10.0.1.11:22 root@172.16.110.11
3.2. 隧道连接
# 在serverC(172.16.110.11) 上执行,将会登陆serverB(10.0.1.12)主机
ssh root@127.0.0.1 -P9022
# 在serverC(172.16.110.11) 上执行,将会登陆serverA(10.0.1.11)主机
ssh root@127.0.0.1 -P9023
4. 动态端口转发
有点类似shadowsocks
命令格式
ssh -D <local port> <SSH Server>
4.1. 隧道搭建(serverA 执行)
[root@00 ~]# ssh -N -D 9000 root@serverC # ssh -N -D 127.0.0.1:9000 root@serverC
4.2. 隧道连接 (serverA 执行)
(若serverC
为公网ip,也可通过其ip访问公网网络)
然后通过 ProxyChains-NG或其他程序配置 socks4或socks5即可通过serverC
连接serverC
同网段的其他主机(serverD
)
5. windows 端口转发
plink.exe
是putty
的附属工具 .
$> plink.exe -ssh -i sshrsa.ppk 9022:10.0.1.12:22 root@10.0.1.12