Bash:远程 SSH ncat 命令需要 sigint 退出

标签 bash ssh

我有一些有趣的情况,但我想不通。

我需要能够通过 SSH 远程发出命令,然后将结果通过 ncat 隧道传输回原始服务器。

我的命令比这复杂一点(涉及 innobackupex,一个 MySQL 备份实用程序),但这个最小的例子显示了同样的问题:

ncat -l 9970 &
ssh db-202 "echo 'testing' | ncat $BACKUPSERVER 9970"
... other commands

问题是在 echo 命令完成(或任何运行的命令)后,脚本只是挂起,后面的命令不会运行。我需要发送一个 ctrl-c (SIGINT) 才能继续。显然,这在 bash 脚本的上下文中并不理想,在此命令自动完成后可能需要发生很多事情。

不确定它是否相关,但发送一个信号并不总是正确地终止双方的 ncat 隧道。有时我需要 kill -9 它,可能是因为 sigint 搞砸了。

任何人都可以解释这种行为以及我如何绕过它吗?或者更好的方法来做我想做的事?

谢谢!

最佳答案

终于明白了。

我在隧道的每一侧都添加了 --recv-only 和 --send-only 参数。 根据联机帮助页:

--send-only Only send data, ignoring received; quit on EOF

这或许可以解释,但我认为任何 EOF 都会终止隧道。也许没有这些参数,双方都需要发送一个 EOF?

无论如何,这里是有效的命令。

ncat --recv-only -l 9970 &
ssh db-202 "echo 'testing' | ncat --send-only $BACKUPSERVER 9970"

希望这对将来的人有所帮助。

关于Bash:远程 SSH ncat 命令需要 sigint 退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60532369/

相关文章:

ssh - 通过 cygwin openssh 执行时访问被拒绝

linux - 如何创建putty快捷方式直接跳转到ssh链?

linux - 如何获取自上次使用 bash 修改文件以来的时间(以秒为单位)?

ssh - 是否可以通过一个 ssh 连接进行多个端口转发?

ubuntu - SSH 不接受公钥,权限似乎是正确的

linux - Bash Linux 上的选择菜单错误

java - 拒绝 HostKey : when deploying JAR with gradle ssh plugin

ruby - 安装 Homebrew 时出错 - 找不到 Brew 命令

python - 如何在每行之前打印带有文件名的文件内容?

Bash排序,我不知道如何对同一行进行排序,并选择较旧的