Quero detectar de um script de shell (mais especificamente .zshrc) se ele é controlado por SSH. Eu tentei a variável HOST, mas é sempre o nome do computador que está executando o shell. Posso acessar o nome do host de onde vem a sessão SSH? Comparar os dois resolveria o meu problema.
Toda vez que faço login, há uma mensagem informando o último horário e host do login:
Last login: Fri Mar 18 23:07:28 CET 2011 from max on pts/1
Last login: Fri Mar 18 23:11:56 2011 from max
Isso significa que o servidor possui essas informações.
ssh
shell-script
zsh
stribika
fonte
fonte
.profile
. E o que isso tem a ver com encaminhamento de agente?SSH_AUTH_SOCK
variável. Mas por que você executaria um agente SSH nesse caso? Você quis dizer iniciar um agente se estiver logado sem encaminhamento de agente? Por que não iniciar um agente se já não existe um ([ -n "$SSH_AUTH_SOCK" ] || eval $(ssh-agent)
)?SSH_*
variáveis também são definidas nos subprocessos de um shell que está no início de uma sessão SSH, por exemplo, se você iniciar uma sessão de tela sobre SSH (você deve desmarcar as variáveis antes de iniciar a sessão, se quiser). Acho que a razão para testar o processo pai é que comecei a fazer isso antes do sshd definir qualquer variável de ambiente.Você deve ser capaz de verificar através das
SSH_TTY
,SSH_CONNECTION
ouSSH_CLIENT
variáveis.fonte
env_keep
emsudoers
fazê-lo funcionar em todasu
comandos :)Eu apenas tive o mesmo problema no Linux, usando o Bash. Eu primeiro usei a variável de ambiente SSH_CONNECTION, mas depois percebi que ela não está definida se você
su -
.A solução lastlog acima não funcionou após
su
ousu -
.Finalmente, estou usando
who am i
, que mostra o IP remoto (ou o nome do host) no final, se for uma conexão SSH. Também funciona após su.Usando expressões regulares do Bash, isso funciona:
Se o zsh não suportar expressões regulares, o mesmo poderá ser alcançado de várias maneiras diferentes com grep, cut, sed ou o que for.
Para os curiosos, abaixo é para isso que eu uso isso, no .bashrc do root:
Uma alternativa que também funciona
su
seria procurar recursivamente porsshd
meio dos processos pai:Se a função for adicionada ao .bashrc, ela poderá ser usada como
if is_ssh; then ...
fonte
tmux
sessões remotas e também tem problemas se estiver conectado via IPv6 e não existir um nome reverso de DNS.who am i
não mostra seu endereço IPv6?who am i
não retorna nada em umatmux
sessão remota . 2) O endereço IPv6 pode conter dois pontos que seu regex não permite. Isso pode ser complicado, poiswho am i
contém(:0.0)
em X sessões para mim (xterm).screen
.Eu acho que as respostas de Gilles e Cakemox são boas, mas apenas por completude ...
vem de
pam_lastlog
1 .Você pode imprimir
pam_lastlog
informações usando o comandolastlog
2 , por exemplopara um login local, em comparação com
para um login SSH.
No meu sistema, isso funciona para extraí-lo
last
e tambémw
pode ser útil, por exemplo1 documentação do Linux / FreeBSD para
pam_lastlog
.2 páginas de manual do Linux / FreeBSD
lastlog(8)
.fonte
Comece examinando seu ambiente e encontrando a opção certa
Você pode conectar-se a muitas dessas variáveis de ambiente para acionar ações específicas com base na presença delas.
fonte
Isso é para verificar todas as conexões estabelecidas de outro usuário usando SSH
fonte