是否可以判断终端是否通过 SSH 连接到机器?如果我是 SSHd,需要某种命令来为我执行此操作并执行某些操作吗?
答案1
您可以检查$SSH_CLIENT
和$SSH_TTY
变量是否已设置:
(through SSH) $ [[ -z $SSH_TTY ]]; echo $?
1
(local) $ [[ -z $SSH_TTY ]]; echo $?
0
该$SSH_CLIENT
变量包含您连接的 IP,以及远程和本地端口:
(through SSH) $ echo $SSH_CLIENT
15.3.25.189 54188 22
答案2
尝试按Enter然后按~?。
如果您使用的是 OpenSSH 客户端,您应该会收到执行各种功能的受支持转义序列的列表。
$ ~?
Supported escape sequences:
~. - terminate connection (and any multiplexed sessions)
~B - send a BREAK to the remote system
~C - open a command line
~R - request rekey
~V/v - decrease/increase verbosity (LogLevel)
~^Z - suspend ssh
~# - list forwarded connections
~& - background ssh (when waiting for connections to terminate)
~? - this message
~~ - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)
这将验证连接状态当地的机器而不是检查远程机器上设置的环境变量,因此需要进行远程配置。
答案3
有$SSH_CLIENT
和$SSH_CONNECTION
变量,但如果您使用类似 的程序screen
,这些变量将保持设置,尽管它们已过时。如果这很重要,您可能想使用我的escreen
和sh.screen
公用事业。