首页 > 代码库 > Linux基本功杂记——[023]——「OpenSSH tunneling」

Linux基本功杂记——[023]——「OpenSSH tunneling」

SSH tunneling 相关


参考資料:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/

 本地端口转发:

  • 适用场景:发起端可以连接 SSH_server_host 端的 ssh 服务,但无法与最终目标 goal_host 的程序直接通信,而 SSH_server_host 可以
  • 命令格式:ssh [-g] -L <local_port>:<goal_host>:<goal_port> username@<SSH_server_host>
  • local_port:最初发起连接的主机端口号
  • goal_host:最终目标主机的 IP 或 主机名,可以与 SSH_server_host 为同一台机器(此时 goal_host 通常设置为 localhost 或 127.0.0.1)
  • goal_port:最终目标主机的端口号
  • SSH_server_host:负責 SSH 转发的中间主机
  • -g:此选项允许其它主机远程连接至第一台主机的 local_port 端口上,相当于进一步増加通信节点

远程端口转发:

  • 适用场景:发起端无法连接 SSH_server_host 端的 ssh 服务(如:发起端是外网主机,但 SSH_server_host 是 nat 之后的内网主机),但反向连接是允许的,而且 SSH_server_host 可以与最终目标 goal_host 上的程序直接通信
  • 命令格式:ssh [-g] -R <remote_port>:<goal_host>:<goal_port> username@<SSH_server_host>
  • remote_host:最初发起连接的主机端口号,此处的 remote 是相对 SSH_server_host 而言的,因为这个操作需要在 SSH_server_host 上完成
  • goal_host:最终目标主机的 IP 或 主机名,可以是操作此命令的本机
  • goal_port:最终目标主机的端口号
  • SSH_server_host:此处指 最初发起连接的主机 IP 或 主机名,因为此时的 ssh 连接是由中间主机发出的,最初的主机允当 ssh 服务器的角色

目标主机:

#!/bin/bash
#dynamic domain name: fanhui.f3322.net
#URL: http://www.pubyun.com http://www.3322.net

Keep_Alive() {
while :
do
    count=$(ps ax | grep -c "ssh -gNTR 9527:localhost:22 fh@fanhui.f3322.net")
    if [[ $count -lt 2 ]]
    then
        su fh -c "ssh -gNTR 9527:localhost:22 fh@fanhui.f3322.net"
    fi
    sleep 300s
done
}

Keep_Alive >/dev/null 2>&1 &

云端( SSH 中转站):

#!/bin/bash
while :
do
    lynx -mime_header -auth=kitex:aibbigql"http://members.3322.net/dyndns/update?system=dyndns&hostname=fanhui.f3322.net" 2>/dev/null
    Ip_0=$(curl http://members.3322.org/dyndns/getip)
    sleep 600s
    Ip_1=$(curl http://members.3322.org/dyndns/getip)
    
    while [[ $Ip_1 -eq $Ip_0 ]]
    do
        sleep 600s
        Ip_1=$(curl http://members.3322.org/dyndns/getip)
    done

done

Linux基本功杂记——[023]——「OpenSSH tunneling」