在執行 OSX 10.7.5 的 Mac 上,我需要為透過 ssh 連線並使用 LDAP 進行身份驗證的非互動式使用者設定 PATH。這是在這裡提出(並回答)的相同問題:
但我對 PAM 或 LDAP 不夠熟悉,無法完全理解答案。
看來我需要:
add a line to /etc/pam.d/sshd saying "auth required pam_env.so"
create a file named /etc/security/pam_env.conf
但 pam_env.conf 的文檔確實令人困惑,我無法判斷我是否需要預設值或覆蓋值。
我認為這些是正確的步驟嗎?我應該將哪一行放入 pam_env.conf 中?
謝謝,克里斯
ps 我嘗試將「auth required pam_env.so debug」行放入 /etc/pam.d/sshd 中,但在 /var/log/system.log 中沒有看到任何看起來來自 pam_env.so 的內容。我還創建了 /etc/security/pam_env.conf 並將“PATH DEFAULT=/usr/fred OVERRIDE=/usr/george”行放入其中,它對 PATH 沒有明顯的影響。
pps 如果我執行:
ssh USER@MACHINE echo \$SHELL
它說/bin/bash。如果我隨後登入 MACHINE 並將此行新增至 /etc/bashrc:
export Test=Fred
並返回我的機器並執行:
ssh USER@MACHINE echo \$Test
它什麼也不返回。當我使用 LDAP 以這種方式登入時,它不會執行 /etc/bashrc。
ppps 一些可能很重要的附加資訊: 在 MACHINE 上沒有名為 USER 的本機用戶。 MACHINE 已設定為進行 LDAP 驗證,因此當我 ssh USER@MACHINE 時,我的 $HOME 設定為 /Network/Servers/blah/blah/Users/USER。如果我編輯/Network/Servers/blah/blah/Users/USER/.bashrc 來設定PATH,它對我來說可以正常工作,但這不是一個很好的解決方案,因為這意味著每個希望訪問此伺服器的人都必須編輯他們的網頁.bashrc。
答案1
透過以下命令,您可以強制取得/etc/bashrc
所有 SSH 登入(無論是否有互動)。這可能會給那些依賴/etc/bashrc
不執行非互動式登入的用戶帶來一些問題,因此請謹慎操作(儘管這正是您所要求的,因此您可能知道其含義)。
首先添加ForceCommand /usr/local/bin/sshd_envs
到/etc/sshd_config
.然後將以下內容放入/usr/local/bin/sshd_envs
:
#!/bin/bash
source /etc/bashrc
if [ -n "$SSH_ORIGINAL_COMMAND" ]; then
eval $SSH_ORIGINAL_COMMAND
else
exec $SHELL
fi
無論您輸入什麼環境設置,/etc/bashrc
每次 SSH 登入都會進入環境。
請注意,/etc/bashrc
OS/X 的預設設定將在評估前幾行後立即退出(因為 PS1 未設定為非互動式 shell):
if [ -z "$PS1" ]; then
return
fi
因此,要么註解掉這些行,要么將您想要評估非互動式 SSH 登入的所有內容放在這些行之前。