解決策 1:
「w」または「who」コマンド出力を使用できます。 ssh 経由で接続すると、ソース IP が表示されます。
解決策 2:
unix.stackexchange で見つけた素晴らしい回答を次に示します。
- 変数
SSH_CLIENT
のいずれかの場合 またはSSH_TTY
が定義されています。これは ssh セッションです。 - ログイン シェルの親プロセスは
ps -o comm= -p $PPID
で確認できます .sshd
の場合 、ssh セッションです。
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
SESSION_TYPE=remote/ssh
else
case $(ps -o comm= -p $PPID) in
sshd|*/sshd) SESSION_TYPE=remote/ssh;;
esac
fi
解決策 3:
SSH_*
を追加できます env_keep
まで sudoers
で 他のユーザーに切り替えている間にこれを検出できるようにします。
解決策 4:
bash シェルが直接 sshd の子プロセスであるかどうか (n>1 層の深さではない) を知りたい場合は、次のことができます
<ブロック引用>猫 /proc/$PPID/ステータス |頭 -1 |カット -f2
sshd
が返されるはずです または、現在のシェルの親プロセス名です。
解決策 5:
問題に対する考え方を再考したいと思います。問題は、「特定のコマンドをオフにしたいので、SSH 経由でログインしていますか」ということではありません。 「特定のコマンドを有効にするため、コンソールにログインしていますか?」