我在使用 SSH + Bash + Terminal.app 时遇到了一个奇怪的问题:当 SSH 在后台运行时,shell 似乎在大约 50% 的时间内随机丢失按键。
例如,如果我运行:
$ ssh -N my-tunnel &
$ # typing becomes lossy
然后输入“asdf”,只有字母“a”和“f”可能会出现(尽管这是随机的并且部分与打字速度相关;如果我全速打字,可能只会出现“f”)。
此问题仅影响外壳。例如,如果我运行ssh -N my-tunnel & cat
,字符将按照 cat 的预期进行回显。一旦猫被杀死,按键就会丢失,我又回到了外壳。
其他注意事项:
- 其他终端窗口不受影响
- ssh 终止后 shell 立即恢复正常
- 使用
nohup ssh -N my-tunnel &
不会改变任何东西
那么:这是怎么回事?有什么方法可以在不破坏终端的情况下在后台进行 ssh 操作吗?
答案1
您应该使用-n
except 来-N
防止 ssh 从终端读取数据。
答案2
这是正常行为。ssh
当它仍然连接到终端时,不要在后台运行。如果您想在不再需要终端时将其置于后台(例如密码),请使用该-f
选项而不是使用&
:
ssh -fN my-tunnel