我有很多机器,我使用类似于以下内容的配置文件创建隧道:
Host mygizmo-tun143
HostName 1.2.177.16
HostKeyAlias [1.2.177.16]:6000
User tunneluser
Port 6000
ServerAliveInterval 15
ServerAliveCountMax 4
Tunnel point-to-point
TunnelDevice 143:0
IdentityFile /home/tunnels/.ssh/id_dsa
UserKnownHostsFile /home/tunnels/.ssh/known_hosts
ConnectTimeout 10
ControlMaster auto
ControlPath /var/sshsessions/mygizmo-tun143
ControlPersist yes
我使用以下脚本启动隧道:
/bin/tunctl -u $USER -t $LOCAL_INTERFACE
/bin/ip link set $LOCAL_INTERFACE down
/bin/ip addr add $LOCAL_ADDRESS/30 peer $PEER_ADDRESS dev $LOCAL_INTERFACE
/bin/ip link set $LOCAL_INTERFACE mtu 1300
/bin/ip link set $LOCAL_INTERFACE up
/usr/bin/ssh -n -T -F "$SSH_CONFIG_PATH" "$SSH_TUNNEL_HOST" "sudo /opt/sbin/iproutetunnelsetup $REMOTE_INTERFACE $PEER_ADDRESS $LOCAL_ADDRESS" &
(该脚本中的变量并不那么重要。iproutetunnelsetup 脚本在对等方上执行类似的操作并确保接口已启动)
这一切都进展顺利,直到连接中断导致隧道接口崩溃,但 ssh 会话仍处于打开状态。
除了对接口执行 ping 操作或对数据包进行计数之外,是否有方法可以确定 ssh 声称的点对点隧道是否真正正常工作。我曾以为(希望)隧道会像端口转发一样工作,并且只是附加到现有实例,但似乎每个实例只能有一个隧道,并且隧道没有“-O Cancel”命令。
;tl;博士
我可以对 ssh 实例运行任何命令来停止隧道,同时保持 ssh 会话打开吗?