linux-ssh隧道相关

1. 记录一个草稿

参考文献 :

http://www.zsythink.net/archives/2450

http://codelife.me/blog/2012/12/09/three-types-of-ssh-turneling/

https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html

主机定义 :

  1. serverA: 10.0.1.11
  2. serverB: 10.0.1.12
  3. serverC: 172.16.110.11
  4. 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.exeputty的附属工具 .

$> plink.exe -ssh -i sshrsa.ppk 9022:10.0.1.12:22 root@10.0.1.12