在我們的設定中,我們被迫使用 Microsoft Active Directory (AD) 透過 ssh 存取我們的 Linux VM,這樣當員工離開時,一旦 AD 帳戶被停用,他們就無法存取 VM。
我們已經設定了所有數據和用戶。所以我提出的計劃是:
停用對原始使用者帳戶的所有遠端/ssh 訪問,僅允許透過新的 AD 帳戶進行存取。
透過 ssh 登入其 AD 帳戶後,他們會自動登入其原始使用者帳戶。
我需要logname
列印原始使用者帳戶(即他們自動登入的帳戶)而不是新的 AD 帳戶。
答案1
在非常簡單的基礎上,您可以將相應的登入 shell 變數替換為/etc/passwd
重定向腳本:
john_AD:x:1000:1000:,,,:/home/john_old:/sbin/redirect_user
腳本就像
#!/bin/bash
#autoredirect user to old login
case $USER in
jonh_AD) oldname=john_old
#add list of users
esac
su "$oldname"
然後確保 AD_user 可以在沒有密碼的情況下登入舊用戶,例如透過條目sudoers
(調整腳本以使用sudo
)。
然而,我仍然建議創建一個“ID更新”腳本,在移動時運行一次,並且將來的設定不會那麼繁瑣。這更加穩定、安全,並且需要與上面的腳本一樣多的努力。
答案2
編輯為 usessh
而不是,login
因為它可以使用公鑰身份驗證並且不需要修改 sudoers 列表(通過sudo visudo
)。我還添加了該命令,/etc/bash.bashrc
因為它具有如果不交互運行則不執行任何操作的預期效果。該腳本對於尚未正確設定 ssh 用戶端的用戶來說是一個方便的腳本連接隧道(也稱為 ssh 多跳)。
一旦我弄清楚了連接隧道設置,我將添加更多內容。
受到其他答案的啟發,但有一種替代方法(因為 AD 用戶未在 /etc/passwd.conf 中列出)
設定:
- 一行
/etc/bash.bashrc
(僅當您希望在初始登入時預設執行該行時):
# Executes convenience script which prompts all white-listed users whether they wish to login as their default work user account
/bin/login_redirect
這會導致使用者透過 ssh 登入其預設工作使用者帳戶。
主要腳本:/bin/login_redirect
(必須對所有使用者可執行,chmod +x bin/login_redirect
)
!/usr/bin/env bash
generate_divider() {
user_query="$1"
user_query_len="${#user_query}"
user_query_len=$((user_query_len+1))
str=$(printf "%${user_query_len}s")
divider="${str// /_}"
}
case "$(logname)" in
# White-list
12345632) work_user=dean;;
12345633) work_user=tom;;
12345634) work_user=mary;;
esac
work_user="${work_user:-none}"
if [ "${work_user}" != "none" ]; then
user_query="Do you wish to login as your default work user? [Y/n]: "
generate_divider "${user_query}"
echo
echo "${divider}"
echo "[WARNING]: You are connected directly to your AD account."
echo " Ask the admin of this server for help"
echo " configuring a multi-hop ssh connection. This "
echo " is a convenience script written to allow"
echo " connection to your default work user in the"
echo " interim."
read -p "${user_query}" login_ans
login_ans="${login_ans:-Y}"
if [ "${login_ans}" == "Y" ]; then
echo "Username: ${work_user}"
exec ssh -t "${work_user}"@"$(hostname)" "echo ${divider}; echo; /bin/bash;"
fi
fi
注意:如果login_redirect
由非工作使用者執行,那麼這會自動將他們登入預設工作使用者。