Existe uma maneira de obter o endereço IP do cliente SSH do usuário em um script bash?

Existe uma maneira de obter o endereço IP do cliente SSH do usuário em um script bash?

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
sshnormalmente definirá as seguintes variáveis ​​de ambiente:

[…]

SSH_CONNECTIONIdentifica 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 .bashrcvocê 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.)

informação relacionada