Skip to content

Instantly share code, notes, and snippets.

@lizhaomiusi
Forked from fly2xiang/ssh_tunnel.md
Last active October 19, 2016 03:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lizhaomiusi/f54df6e2c57a5e36b7c80b0f28da29a7 to your computer and use it in GitHub Desktop.
Save lizhaomiusi/f54df6e2c57a5e36b7c80b0f28da29a7 to your computer and use it in GitHub Desktop.
SSH隧道/端口转发/代理
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host #本地监听listen_port,转发到DST_Host的DST_Port端口,通过Tunnel_Host转发
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host #Tunnel监听listen_port,转发到DST_Host的DST_Port端口,通过本机转发
ssh -C -f -N -g -D listen_port user@Tunnel_Host #在本地listen_port端口创建动态代理(SOCKS5)

都是在本机与Tunnel_Host建立隧道,第一条命令是在本机监听,通过远程主机转发;第二条命令是在远程主机监听,在本机进行转发。

相关参数的解释: -f Fork into background after authentication. 后台认证用户/密码,通常和-N连用,不用登录到远程主机。 -L port:host:hostport 将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport -R port:host:hostport 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport -D port 指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发. -C Enable compression. 压缩数据传输。 -N Do not execute a shell or command. 不执行脚本或命令,通常与-f连用。 -g Allow remote hosts to connect to forwarded ports. 在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用。

自动重连

可使用几个简单的循环程序,另外要配置私钥免密码登录

保持长时间链接

可尝试加上 -o TCPKeepAlive=yes 参数

kill `ps aux | grep 'ssh -C -f -N -g -R' | grep -v grep | awk '{print $2}'` #杀掉进程

本地执行 ssh -C -f -N -g -R 8804:127.0.0.1:8888 root@192.168.184.128

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment