![bash スクリプトでユーザーの SSH クライアント IP アドレスを取得する方法はありますか?](https://rvso.com/image/1606698/bash%20%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%20SSH%20%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%20IP%20%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
アプリケーションの制限により、同じログインを使用する必要があるユーザーが 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 バリアントで機能するはずです。認証ログ ファイルの場所/名前と正確な形式は他のフレーバーによって異なる場合があります。)