ssh 是每一个运维人员最熟悉的工具了。可是它的神奇功能你可能并不清楚。今天就用例子说一说 ssh 的代理转发功能。web
1、代理远程端口到本地bash
如上图中 Client 到 Server A 的网络是通的,Server A 到 Server B 的网络也是通的,Client 到 Server B 的网络不通。Client 怎么能一次 ssh 就连到 Server B 呢?服务器
下面一条 ssh 命令帮你搞定网络
# 在 Server A 上执行 ssh -qTfNnC -L 10.0.0.2:9022:127.0.0.1:22 root@172.25.0.2
有了上面的命令,而后在 Clinet 执行 `ssh -p 9022 10.0.0.2` 便可登陆到 Server B。运维
2、代理本地端口到远端(内网穿透)ssh
如上图 Server A 有公网 IP,Server B 没有公网 IP,Server B 上有 web 服务。Server B 能够 ssh 到 Server A。Server A 不能直接连到 Server B。如何能让 Client 访问到 Server B 的 web 服务呢?工具
下面一条 ssh 命令帮你搞定ui
# 在 Server B 上执行 ssh -qTfNnC -R '[::]:8080:127.0.0.1:80' root@123.57.215.128 # 远程服务器 123.57.215.128 sshd 须要开启 `GatewayPorts yes` # grep GatewayPorts /etc/ssh/sshd_config# GatewayPorts yes
有了上面的命令,而后在 Client 直接访问 http://123.57.215.128:8080/ 就访问到了 Server B 的 web 服务。3d
参数具体含义以下:代理
-q: quiet模式,忽视大部分的警告和诊断信息(好比端口转发时的各类链接错误)
-T: 禁用tty分配(pseudo-terminal allocation)
-f: 登陆成功后即转为后台任务执行
-N: 不执行远程命令(专门作端口转发)
-n: 重定向stdin为/dev/null,用于配合-f后台任务
-C: 开启压缩