知道用户正在通过 shell 脚本进行 ssh 连接吗?

知道用户正在通过 shell 脚本进行 ssh 连接吗?

我有一个 shell 脚本,如果用户正在物理使用计算机,我想执行一件事,如果用户通过 SSH 登录,我想执行另一件事。

我该如何做呢?

更具体地说,我的普通机器是 OS X,我想使用 OS X 图形编辑器 (BBEdit) 作为我的编辑器。但是,如果我从上网本通过 SSH 连接到我的 Mac,我想使用 vim - 我没有与 Mac 的图形连接。

谢谢!

答案1

您应该能够使用 SSH_CONNECTION、SSH_TTY 或 DISPLAY 环境变量。

看:http://developer.apple.com/library/mac/#documentation/Darwin/Reference/Manpages/man1/ssh.1.html

 SSH_CONNECTION        Identifies the client and server ends of the connection.  The variable contains
                       four space-separated values: client IP address, client port number, server IP
                       address, and server port number.

编辑:SSH_CLIENT 也是一个选项,但它没有出现在手册页中。

答案2

比较您的env本地和通过 SSH 登录时的情况。

我有例如,,SSH_CONNECTION仅在通过 SSH 登录时定义。SSH_CLIENTSSH_TTY

答案3

我相信 /var/run/utmpx(参见“man utmpx”)有此信息。如果您运行“who”,您会看到 who 命令可以判断您是否从远程节点连接(甚至知道您从哪里连接)。

因此,您可以始终使用 who 命令并调整输出来确定这一点。

注意:我相信上述答案(关于使用 SSH_CONNECTION)是更好的解决方案。

相关内容