为什么“作业”没有显示我在后台打开的 ssh 隧道?

为什么“作业”没有显示我在后台打开的 ssh 隧道?

我正在启动这样的 ssh 隧道:

ssh -f -N $PORT:127.0.0.1:$port example.com

-fssh 置于后台,这正是我想要的。这有效,因为设置了 SSH 隧道。但如果我使用,jobs我看不到列出的 ssh 连接。为什么?

答案1

因为您没有使用 bash 将其发送到后台。jobs仅报告 bash 本身发送到后台的进程;正如 ericslaw 所说,是 ssh 本身将其“守护”了。要让作业报告它,您需要执行以下操作:

ssh -N $PORT:127.0.0.1:$port example.com &

答案2

ssh 进程可能已守护,与 shell 断开连接。您可以这样想(但可能不是按此顺序):

您启动的“ssh”进程实际上关闭了它的所有文件描述符(stdin、stdout、stderr),断开了与 tty 的连接,并分叉了另一个子 ssh。然后对其自身调用 exit。这使子进程成为孤立进程,而原始 ssh 进程实际上“完成”。

因此,原始 ssh 进程已完成,并且孤立进程不再是 shell 的“子进程”。

使用“ps -ef”或“ps -fu$USER”来查看您感兴趣的 ssh 进程。

答案3

您可以使用命令查看正在监听的程序port

lsof -i :port

它会给你 ssh pid。

相关内容