ETiV
2014-08-20 16:56:02 +08:00
在你内网机器上执行这么个命令:
ssh -fNR :${REMOTE_PROXY_PORT}:localhost:${LOCAL_PORT} -p ${REMOTE_SSH_PORT} -i ${REMOTE_SSH_KEY_FILE} ${REMOTE_USER}@${REMOTE_IP}
-p ${REMOTE_SSH_PORT} 如果公网机器的 sshd 端口不是22, 需要用这个来指定.
-i ${REMOTE_SSH_KEY_FILE} 私钥文件路径, 可以免密码登录.
当然你也可以建立一个 .ssh/config 配置, 这样 -p 和它后面的就都不用敲了, 直接写 host 别名即可.
他会创建从 {远程主机:PROXY端口 -> 本地主机:端口} 的一个映射.
默认的 sshd 配置, 这条命令会让公网机器只监听 127.0.0.1 的端口, 想要解开这个限制, 可以在 sshd_config 里加下面一行, 并重启公网服务器的 sshd:
GatewayPorts yes
# 还可以从 man sshd_config 里查到其他的参数, 使用 yes 是最简单的
这条命令可以让公网那台机器反代任何发起这条命令的机器所在局域网的端口, 只需要把 localhost 那段改成目标机器的IP就行.
另外, 如果你内网机器会时不时的换IP(电信经常这么干), 你还需要做一个 cronjob 去查看连接状态, 并且重连. 我不知道什么 supervisor 之类的会不会起作用, 你可以试试这个.