Em nossa configuração, somos forçados a usar o Microsoft Active Directory (AD) para acesso ssh à nossa VM Linux, para que, quando os funcionários saírem, possam ser impedidos de acessar a VM assim que sua conta AD for desativada.
Já temos todos os nossos dados e usuários configurados. Portanto, meu plano proposto é:
Desative todo o acesso remoto/ssh às contas de usuário originais, permitindo apenas o acesso através de suas novas contas AD.
Ao fazer login na conta do AD, eles fazem login automaticamente na conta de usuário original.
Preciso logname
imprimir a conta de usuário original (ou seja, a conta na qual ele fez login automaticamente) e não a nova conta do AD.
Responder1
De forma muito simplista, você poderia substituir a respectiva variável login-shell por /etc/passwd
um script de redirecionamento:
john_AD:x:1000:1000:,,,:/home/john_old:/sbin/redirect_user
E o roteiro seria como
#!/bin/bash
#autoredirect user to old login
case $USER in
jonh_AD) oldname=john_old
#add list of users
esac
su "$oldname"
Em seguida, certifique-se de que AD_user possa fazer login no usuário antigo sem senha, por exemplo, por meio de uma sudoers
entrada (adaptar script para usar sudo
).
No entanto, ainda sugiro criar um script de "atualização de ID" para ser executado uma vez com a mudança e ter uma configuração menos complicada no futuro. Isso é muito mais estável, seguro e requer tanto esforço quanto o script acima.
Responder2
Editado para usar ssh
em vez de login
porque pode fazer uso de autenticação de chave pública e não precisa de modificação na lista de sudoers (por sudo visudo
). Também adiciono o comando /etc/bash.bashrc
porque ele tem o efeito desejado de não fazer nada se não estiver sendo executado de forma interativa. Este script se torna um script conveniente para usuários que ainda não configuraram seus clientes ssh corretamente para usartunelamento de conexão(também conhecido como ssh multihop).
Acrescentarei mais informações sobre a configuração do tunelamento de conexão assim que descobrir.
Inspirado na outra resposta, mas em uma abordagem alternativa (porque os usuários do AD não estão listados em /etc/passwd.
Configurar:
- Uma entrada de linha
/etc/bash.bashrc
(somente se você quiser que isso seja executado por padrão no login inicial):
# Executes convenience script which prompts all white-listed users whether they wish to login as their default work user account
/bin/login_redirect
Isso faz com que o usuário faça login via ssh em sua conta de usuário de trabalho padrão.
Roteiro principal:/bin/login_redirect
(deve ser executável para todos os usuários 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
Nota: Se login_redirect
for executado por um usuário que não seja de trabalho, isso fará com que ele faça login automaticamente em seu usuário de trabalho padrão.