![Existe uma maneira de obter o endereço IP do cliente SSH do usuário em um script bash?](https://rvso.com/image/1606698/Existe%20uma%20maneira%20de%20obter%20o%20endere%C3%A7o%20IP%20do%20cliente%20SSH%20do%20usu%C3%A1rio%20em%20um%20script%20bash%3F.png)
Tenho dois usuários que precisam utilizar o mesmo login devido a uma restrição do aplicativo.
Esses usuários têm opiniões muito diferentes sobre a aparência de um prompt de shell. Um deles até insiste em modificar a paleta de cores. Isso resultou em uma disputa .bashrc PS1. Dei-lhes scripts para definirem as suas próprias preferências, mas... digamos apenas que é complicado.
Felizmente, ambos se conectam a partir de locais com endereços IP conhecidos. Existe uma maneira de incorporar o endereço IP remoto do usuário em um condicional e, assim, dar a ambos o que desejam, sem nenhuma etapa adicional? Eles estão se conectando via ssh.
Responder1
Do manual do cliente OpenSSH SSH ( man 1 ssh
):
ENVIRONMENT
ssh
normalmente definirá as seguintes variáveis de ambiente:[…]
SSH_CONNECTION
Identifica as extremidades cliente e servidor da conexão. A variável contém quatro valores separados por espaço: endereço IP do cliente, número da porta do cliente, endereço IP do servidor e número da porta do servidor.[…]
Em .bashrc
você deve fazer como:
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
ou gosto
if [ "${SSH_CONNECTION%% *}" = "1.2.3.4" ]; then
PS1=…
else
PS1=…
fi
Responder2
Se eles estiverem fazendo login com ssh usando chaves, você pode fazer algo como:
myip=`grep 'Accepted publickey for bozo' /var/log/auth.log | tail -1 | awk '{print $11}'`
e então compare $ myip. Se eles estiverem usando senhas, modifique de acordo. (Modifique também se por algum motivo o nome de usuário não for bozo.)
(Isso deve funcionar para Ubuntu e outras variantes do Debian; a localização/nome do arquivo de log de autenticação e o formato exato podem variar com outros tipos.)