bash スクリプトでユーザーの SSH クライアント IP アドレスを取得する方法はありますか?

bash スクリプトでユーザーの SSH クライアント IP アドレスを取得する方法はありますか?

アプリケーションの制限により、同じログインを使用する必要があるユーザーが 2 人います。

これらのユーザーは、シェル プロンプトがどのように見えるかについて、大きく異なる意見を持っています。そのうちの 1 人は、カラー パレットの変更を主張しています。これにより、.bashrc PS1 の論争が発生しました。私は、各自の好みを設定するためのスクリプトを提供しましたが、とにかく複雑です。

幸いなことに、どちらも既知の IP アドレスを持つ場所から接続しています。ユーザーのリモート IP アドレスを条件に組み込み、ユーザー側で追加の手順を踏むことなく、両方のユーザーが望むものを提供できる方法はありますか? ユーザーは SSH 経由で接続しています。

答え1

OpenSSH SSH クライアント ( ) のマニュアルよりman 1 ssh:

ENVIRONMENT は
ssh通常、次の環境変数を設定します。

[…]

SSH_CONNECTION接続のクライアント側とサーバー側を識別します。変数には、クライアント IP アドレス、クライアント ポート番号、サーバー IP アドレス、サーバー ポート番号の 4 つのスペース区切りの値が含まれます。

[…]

次のように.bashrcしてください:

case "${SSH_CONNECTION%% *}" in
1.2.3.4|1.2.3.5 )
   PS1=…
   ;;
2.2.7.* )
   PS1=…
   ;;
# add support for more users if needed
esac

または

if [ "${SSH_CONNECTION%% *}" = "1.2.3.4" ]; then
   PS1=…
else
   PS1=…
fi

答え2

キーを使用して ssh でログインしている場合は、次のようにします。

myip=`grep 'Accepted publickey for bozo' /var/log/auth.log | tail -1 | awk '{print $11}'`

次に $myip を比較します。パスワードを使用している場合は、それに応じて変更します。(何らかの理由でユーザー名が bozo でない場合も変更します。)

(これは Ubuntu および他の Debian バリアントで機能するはずです。認証ログ ファイルの場所/名前と正確な形式は他のフレーバーによって異なる場合があります。)

関連情報