In unserem Setup sind wir gezwungen, Microsoft Active Directory (AD) für den SSH-Zugriff auf unsere Linux-VM zu verwenden, sodass Mitarbeitern beim Ausscheiden aus dem Unternehmen der Zugriff auf die VM verweigert werden kann, sobald ihr AD-Konto deaktiviert wird.
Wir haben bereits alle unsere Daten und Benutzer eingerichtet. Mein vorgeschlagener Plan ist also:
Deaktivieren Sie sämtliche Remote-/SSH-Zugriffe auf die ursprünglichen Benutzerkonten und erlauben Sie den Zugriff nur über ihre neuen AD-Konten.
Wenn sie sich per SSH bei ihrem AD-Konto anmelden, werden sie automatisch bei ihrem ursprünglichen Benutzerkonto angemeldet.
Ich muss logname
das ursprüngliche Benutzerkonto ausdrucken (also das Konto, bei dem sie automatisch angemeldet werden) und nicht das neue AD-Konto.
Antwort1
Ganz einfach: Sie können die entsprechende Login-Shell-Variable durch /etc/passwd
ein Umleitungsskript ersetzen:
john_AD:x:1000:1000:,,,:/home/john_old:/sbin/redirect_user
Und das Skript würde so aussehen:
#!/bin/bash
#autoredirect user to old login
case $USER in
jonh_AD) oldname=john_old
#add list of users
esac
su "$oldname"
Stellen Sie dann sicher, dass sich der AD_Benutzer ohne Passwort beim alten Benutzer anmelden kann, z. B. über einen sudoers
Eintrag (Skript entsprechend anpassen sudo
).
Ich schlage jedoch trotzdem vor, ein „ID-Update“-Skript zu erstellen, das einmal beim Umzug ausgeführt wird und in Zukunft eine weniger umständliche Einrichtung ermöglicht. Dies ist weitaus stabiler, sicherer und erfordert genauso viel Aufwand wie ein solches Skript wie oben.
Antwort2
Bearbeitet, um ssh
anstelle von zu verwenden login
, da es die Public-Key-Authentifizierung nutzen kann und keine Änderung der Sudoers-Liste (durch sudo visudo
) erfordert. Ich füge auch den Befehl zu hinzu, /etc/bash.bashrc
da er den gewünschten Effekt hat, nichts zu tun, wenn er nicht interaktiv ausgeführt wird. Dieses Skript wird zu einem praktischen Skript für Benutzer, die ihre SSH-Clients noch nicht richtig eingerichtet haben, umVerbindungstunnelung(auch als SSH-Multihop bekannt).
Ich werde mehr zum Einrichten des Verbindungstunnels hinzufügen, sobald ich es herausgefunden habe.
Inspiriert von der anderen Antwort, aber ein alternativer Ansatz (da AD-Benutzer nicht in /etc/passwd aufgeführt sind).
Aufstellen:
- Eine Zeile in
/etc/bash.bashrc
(nur, wenn dies standardmäßig bei der ersten Anmeldung ausgeführt werden soll):
# Executes convenience script which prompts all white-listed users whether they wish to login as their default work user account
/bin/login_redirect
Dies bewirkt, dass sich der Benutzer per SSH bei seinem standardmäßigen Arbeitsbenutzerkonto anmeldet.
Hauptskript:/bin/login_redirect
(muss für alle Benutzer ausführbar sein, 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
Hinweis: Wenn login_redirect
dies von einem Nicht-Arbeitsbenutzer ausgeführt wird, wird dieser automatisch bei seinem standardmäßigen Arbeitsbenutzer angemeldet.