linux - Bash - 了解 SSH 隧道是否已正确创建

标签 linux bash ssh

情况是这样的

我有一台名为 MY_COMPUTER 的计算机,一台名为 REMOTE_VM 的计算机,我有一个用户 remoteuser/etc 中/passwd shell /bin/false

这个用户只有一个功能,在反向 SSH 之后做一个 SSH 隧道。

我目前使用的命令是

ssh \
   -nNT \
   -R 42242:127.0.0.1:22 \
   remoteuser@REMOTE_VM

我希望这个命令在脚本中执行,并有办法获得回调或某种方式(比如将这个 ssh 命令放在后台并定期检查套接字文件的存在或类似的东西) 以检查连接是否已实际打开,而不仅仅是在网络速度较慢的情况下挂起连接。

openssh-client 是否有这样的方法,或者您必须使用 ssh 客户端的自定义实现,以便您可以将回调放在任何您想要的地方?

我更喜欢使用普通 openssh-client 和 bash 的(甚至是肮脏的)解决方案。

最佳答案

详细运行命令,捕获输出,然后测试输出是否表明 session 已建立?沿着:

TMPFILE=$(mktemp)
2>"$TMPFILE" ssh -v -nNT -R 42242:127.0.0.1:22 remoteuser@REMOTE_VM &
grep 'debug1: Entering interactive session.' "$TMPFILE"

或者,也许您可​​以轮询 netstat 的输出。

关于linux - Bash - 了解 SSH 隧道是否已正确创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41250907/

相关文章:

php - UTF-8贯穿始终

bash - 如果当前目录不存在,如何使我的 Bash 脚本失败?

通过 ssh 克隆 Git,通过 https 推送

通过反向隧道进行 Git 克隆

java - 如何解决 JSch 公钥身份验证失败而其他实用程序使用相同 key 成功的错误?

创建一个新进程来执行ls命令

linux - 运行 gulp dist 时未找到 libsass 绑定(bind)

linux - Lubuntu : Using . sh 脚本作为键绑定(bind),代码有效,执行脚本时出错

php shell_exec bash.exe 在 Window XP IIS 中不工作

bash - 如何使用 AWK 和 ffmpeg 提取时间码