Quiero detectar desde un script de shell (más específicamente .zshrc) si se controla a través de SSH. Probé la variable HOST pero siempre es el nombre de la computadora que ejecuta el shell. ¿Puedo acceder al nombre de host de donde proviene la sesión SSH? Comparar los dos resolvería mi problema.
Cada vez que inicio sesión hay un mensaje que indica la última hora de inicio de sesión y el host:
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
Esto significa que el servidor tiene esta información.
ssh
shell-script
zsh
Stribika
fuente
fuente
.profile
. ¿Y qué tiene esto que ver con el reenvío de agentes?SSH_AUTH_SOCK
variable. Pero, ¿por qué ejecutarías un agente SSH en ese caso? ¿Quiso decir iniciar un agente si ha iniciado sesión sin reenvío de agente? ¿Por qué no iniciar un agente si aún no hay uno ([ -n "$SSH_AUTH_SOCK" ] || eval $(ssh-agent)
)?SSH_*
variables también se configuran en subprocesos de un shell que está al frente de una sesión SSH, por ejemplo, si inicia una sesión de pantalla sobre SSH (si lo desea, debe desactivar las variables antes de comenzar la sesión). Creo que la razón para probar el proceso padre es que comencé a hacerlo antes de que sshd definiera las variables de entorno.Usted debe ser capaz de verificar a través de los
SSH_TTY
,SSH_CONNECTION
oSSH_CLIENT
variables.fuente
env_keep
ensudoers
hacer que funcione a través desu
comandos :)Acabo de tener el mismo problema en Linux, usando Bash. Primero usé la variable de entorno SSH_CONNECTION, pero luego me di cuenta de que no está configurada si usted
su -
.La última solución de registro anterior no funcionó ni después
su
nisu -
.Finalmente, estoy usando
who am i
, que muestra la IP remota (o el nombre de host) al final si es una conexión SSH. También funciona después de su.Usando expresiones regulares de Bash, esto funciona:
Si zsh no admite expresiones regulares, lo mismo se puede lograr de muchas maneras diferentes con grep, cut, sed o lo que sea.
Para los curiosos, a continuación es para lo que uso esto, en el .bashrc de la raíz:
Una alternativa que también funciona
su
sería buscar de forma recursiva asshd
través de los procesos principales:Si la función se agrega a .bashrc, se puede usar como
if is_ssh; then ...
fuente
tmux
sesiones remotas y también tiene problemas si inicia sesión a través de IPv6 y no existe un nombre inverso de DNS.who am i
no muestra su dirección IPv6?who am i
no devuelve nada en unatmux
sesión remota . 2) La dirección IPv6 puede contener dos puntos que su expresión regular no permite. Esto puede ser complicado ya quewho am i
contiene(:0.0)
X sesiones para mí (xterm).screen
.Creo que las respuestas de Gilles y Cakemox son buenas, pero solo para completar ...
proviene de
pam_lastlog
1 .Puede imprimir
pam_lastlog
información con el comandolastlog
2 , p. Ej.para un inicio de sesión local, en comparación con
para un inicio de sesión SSH.
En mi sistema, esto funciona para extraerlo
last
yw
podría ser útil también, por ejemplo1 documentación de Linux / FreeBSD para
pam_lastlog
.2 páginas de manual de Linux / FreeBSD
lastlog(8)
.fuente
Comience por observar su entorno y encontrar la opción correcta
Puede conectar muchas de estas variables de entorno para activar acciones específicas en función de su presencia.
fuente
Esto es para verificar todas las conexiones establecidas de otro usuario usando SSH
fuente