确定进程是否通过 SSH 启动

确定进程是否通过 SSH 启动

我在 Mac 上工作,我的脚本正在与钥匙串交互(代码签名等)。从 El Capitan 开始,与钥匙串的交互非常不同,具体取决于进程是通过 SSH 启动还是本地启动。进程启动后(例如,在我们的例子中,长时间运行的进程是 jenkins 从属进程,各种代码签名脚本通过此进程之上的 jenkins 作业运行),有没有一种简单的方法可以确定它是通过 SSH 启动的还是本地启动的?

理想情况下是某种 ps -ef | 等...类型的脚本?

答案1

您可以检查 ps 的输出(ps auwx | grep java),看看与 jenkins 从属进程关联的进程是否有控制终端。如果有,则可能是通过 SSH 而不是 VNC 启动的。

USER  PID  %CPU  %MEM  VSZ  RSS  TT  STAT  STARTED  TIME  COMMAND

如果 TT 列是 ??,则表示该进程没有控制终端。如果是通过 SSH 连接,通常您会看到类似“s014”的内容。

答案2

OpenSSHsshd为其启动的进程添加了几个环境变量。您可以查找一些特定于 SSH 的变量:

$ ssh localhost
Last login: Fri Sep 16 14:05:49 2016
$ set | grep SSH
SSH_CLIENT='::1 50368 22'
SSH_CONNECTION='::1 50368 ::1 22'
SSH_TTY=/dev/ttys001
$

变量的完整列表及其含义在ssh 手册页

相关内容