シェルがSSHによって制御されているかどうかをどのように検出しますか?

シェルがSSHによって制御されているかどうかをどのように検出しますか?

SSHを介して制御されるかどうかをシェルスクリプト(より具体的には.zshrc)で検出したいと思います。 HOST変数を試しましたが、常にシェルが実行されているコンピューターの名前。 SSHセッションが開始されたホスト名にアクセスできますか? 2つを比較すると、私の問題は解決しました。

ログインするたびに、最後のログイン時間とホストを知らせるメッセージが表示されます。

Last login: Fri Mar 18 23:07:28 CET 2011 from max on pts/1
Last login: Fri Mar 18 23:11:56 2011 from max

これは、サーバーにこの情報があることを意味します。

ベストアンサー1

私が使用する基準は次のとおりです~/.profile

  • 変数の1つSSH_CLIENTが定義されている場合はSSHセッションです。SSH_TTY
  • ログインシェルの親プロセス名がある場合sshdはSSHセッションです。
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
  SESSION_TYPE=remote/ssh
# many other tests omitted
else
  case $(ps -o comm= -p "$PPID") in
    sshd|*/sshd) SESSION_TYPE=remote/ssh;;
  esac
fi

(セッション開始ではなくシェル構成でこれをテストするのはなぜですか?)

おすすめ記事