有沒有辦法在 bash 腳本中取得使用者的 SSH 用戶端 IP 位址?

有沒有辦法在 bash 腳本中取得使用者的 SSH 用戶端 IP 位址?

由於應用程式限制,我有兩個用戶需要使用相同的登入名稱。

這些使用者對於 shell 提示符號的外觀有著截然不同的看法。其中一位甚至堅持要修改調色板。這導致了 .bashrc PS1 爭議。我給了他們腳本來設定自己的偏好,但是......只能說這很複雜。

幸運的是,它們都從具有已知 IP 位址的位置連接。有沒有一種方法可以將使用者的遠端 IP 位址合併到條件中,從而為他們提供他們想要的東西,而無需執行任何額外的步驟?他們透過 ssh 連結。

答案1

來自 OpenSSH SSH 用戶端手冊(man 1 ssh):

ENVIRONMENT
ssh通常會設定以下環境變數:

[…]

SSH_CONNECTION標識連線的客戶端和伺服器端。此變數包含四個空格分隔的值:客戶端 IP 位址、客戶端連接埠號碼、伺服器 IP 位址和伺服器連接埠號碼。

[…]

.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 變體;身份驗證日誌檔案位置/名稱和確切格式可能會因其他版本而異。)

相關內容