Eu tenho um script que deve ser executado por uma pessoa que efetua login no servidor com SSH .
Existe uma maneira de descobrir automaticamente de que endereço IP o usuário está se conectando?
Claro, eu poderia perguntar ao usuário (é uma ferramenta para programadores, então não há problema com isso), mas seria mais legal se eu descobrisse.
linux
networking
ssh
ip-address
flybywire
fonte
fonte
Respostas:
Verifique se há uma variável de ambiente chamada:
OU
(ou qualquer outra variável de ambiente) definida quando o usuário efetua login. Em seguida, processe-o usando o script de login do usuário.
Extraia o IP:
fonte
${SSH_CLIENT%% *}
sudo -E
Você pode usar o comando:
que lhe dará algo assim:
fonte
pinky --help
:A lightweight 'finger' program; print user information. The utmp file will be /var/run/utmp.
Tente o seguinte para obter apenas o endereço IP:
fonte
who am i
! =whoami
pelo menos no meu Linux. Há uma quinta coisa e é o nome do host do cliente.who am i
: A página de manual parawho
diz:If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.
. Então, realmente qualquer coisa com duas palavras funciona, também coisas comowho likes icecream
.who -m --ips|awk '{print $5}'
para ter apenas IP e nenhuma resposta de DNS reverso. Obrigado pela ajudawho am i
!who am i|awk '{ print $5}'
(tmux(2445).%3)
Basta digitar o seguinte comando na sua máquina Linux:
fonte
fonte
Eu uso isso para determinar minha variável DISPLAY para a sessão ao efetuar login via ssh e preciso exibir o X remoto.
fonte
who am i | awk '{print $6}' | sed 's/[()]//g' | sed 's/\./\\./g'
A última parte escapa aos pontos.Melhorando em uma resposta prévia. Dá o endereço IP em vez do nome do host. --ips não disponíveis no OS X.
mais universal, altere US $ 5 a US $ 6 para o OS X 10.11:
fonte
fonte
(No info could be read for "-p": geteuid()=507 but you should be root.)
sudo ss -tapen | grep ssh | awk '{ print $4}'|grep -v ':22$'
funciona?Você pode obtê-lo de maneira programática por meio de uma biblioteca SSH ( https://code.google.com/p/sshxcute )
fonte
O netstat funcionará (no topo, algo como isto) tcp 0 0 10.x.xx.xx: ssh someipaddress.or.domainame: 9379 ESTABELECIDO
fonte
Resultado:
dois # no meu experimento
fornece o endereço IP.
Resultado:
Mas os resultados são misturados com outros usuários e outras coisas. Precisa de mais trabalho.
fonte
um tópico mais antigo com muitas respostas, mas nenhum é exatamente o que eu estava procurando, por isso estou contribuindo com o meu:
esse método é compatível com ssh direto, usuários sudoed e sessões de tela. ele percorrerá a árvore do processo até encontrar um pid com a variável SSH_CLIENT e registrará seu IP como $ sshClientIP. se ficar muito alto na árvore, ele gravará o IP como 'localhost' e sairá do loop.
fonte
Geralmente, há uma entrada de log em / var / log / messages (ou similar, dependendo do sistema operacional) que você pode receber com o nome de usuário.
fonte
Linux: quem sou eu | awk '{print $ 5}' | sed 's / [()] // g'
AIX: quem sou eu | awk '{print $ 6}' | sed 's / [()] // g'
fonte
Procure por conexões SSH para a conta "myusername";
Pegue a primeira sequência de resultados;
Pegue a 5a coluna;
Divida por ":" e retorne a 1ª parte (o número da porta não é necessário, queremos apenas IP):
netstat -tapen | grep "sshd: myusername" | cabeça -n1 | awk '{split ($ 5, a, ":"); imprima um [1]} '
Outra maneira:
quem sou eu | awk '{l = length ($ 5) - 2; print substr ($ 5, 2, l)} '
fonte
sudo ss -tapen | grep "sshd: $(whoami)"|head -n1|awk '{split($5, a, ":"); print a[1]}'
diz que meu cliente ssh é2a02
e seu "Outra maneira:" diz #tmux(2445).%3
Supondo que ele abra uma sessão interativa (ou seja, aloque um pseudo terminal ) e você tenha acesso ao stdin, você pode chamar um ioctl nesse dispositivo para obter o número do dispositivo (/ dev / pts / 4711) e tentar encontrá-lo em / var / run / utmp (onde também haverá o nome de usuário e o endereço IP de onde a conexão se originou).
fonte
Um polegar para a resposta de @Nikhil Katre:
Aquele que usa
who
oupinky
fez o que é basicamente solicitado. Mas Mas Mas eles não fornecem informações sobre sessões históricas.O que também pode ser interessante se você quiser conhecer alguém que acabou de fazer login e sair quando você inicia esta verificação.
se for um sistema multiusuário. Eu recomendo adicionar a conta de usuário que você está procurando:
EDITAR:
No meu caso, $ SSH_CLIENT e $ SSH_CONNECTION não existem.
fonte
O comando mais simples para obter os últimos 10 usuários conectados à máquina é
last|head
. Para obter todos os usuários, basta usar olast
comandofonte
Estou recebendo a seguinte saída do
who -m --ips
Debian 10:Parece que uma nova coluna foi adicionada. Portanto, as tentativas de
{print $5}
" tomar a quinta coluna " não funcionam mais.Tente o seguinte:
Fonte:
fonte