¿Quién está iniciando mi ssh-agent y por qué no terminará correctamente?


9

Este es un problema que he tenido durante mucho tiempo, pero cada vez que trato de resolver algo me pierdo, así que pensé que sería mejor preguntar aquí dónde quizás alguien más experimentado podría ayudarme.

Antecedentes

Mi Raspberry Pi ejecuta Raspbian Jessie, y uso SSH a menudo para iniciar sesión y ejecutar comandos de forma remota. Durante mis primeras sesiones de SSH, noté que ssh-agentse generaba un proceso en el RPi cada vez que iniciaba sesión, pero nunca terminaba cuando se iniciabaexit : al iniciar y cerrar sesión varias veces, se generaba un montón de ssh-agentprocesos para quedar colgado allí sin hacer nada. Jugueteando y leyendo páginas de manual y respuestas aquí y allá recientemente entendí el propósito ssh-agent, y también aprendí que normalmente debería ser asesinado al cerrar sesión, así que comencé a preguntarme por qué no. Además, noté que la emisión source ~/.bashrccausa que se genere otra instancia ssh-agent. Lo leí en la página man relativaque la variable de entorno SSH_AGENT_PIDdebe definirse porque el ssh-agentprograma debe iniciarse dentro de un evalpara ejecutar su salida y definir dichas variables, que luego son utilizadas por otros comandos relacionados con SSH, incluido ssh-agent -k(para matar al agente en relación con la sesión actual), por lo que corrió echo $SSH_AGENT_PIDy echo $SSH_AUTH_SOCK, pero ambos estaban vacíos. De repente me di cuenta: probablemente el proceso no se mata al cerrar sesión porque ssh-agent -kintenta leer su PID de la variable de entorno que no está configurada.

El problema

Dado ssh-agentque no se está eliminando al cerrar sesión, y esto seguramente sucede porque las variables de entorno necesarias no están configuradas, solo puede significar una cosa: quien llame ssh-agental iniciar sesión probablemente no lo haga de la manera correcta (que sería eval "$(ssh-agent -s)") . Entonces pensé: bueno, ¿cuál es el problema? ¡Solo encontraré el archivo de configuración, servicio o script de inicio de sesión que se ejecute para iniciar el agente y solucionarlo manualmente! ¿Dónde demonios podría estar?

Lo que he intentado

Como me di cuenta de que ssh-agentse genera un an cada vez que llamo source ~/.bashrc, este fue el primer archivo que inspeccioné, pero nada allí ni remotamente hacía referencia a nada relacionado con SSH. Seguí buscando usando vila cadena sshdentro de todos los siguientes archivos, pero no encontré nada :

~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment

¿Hay algún archivo más en el que pueda estar involucrado source ~/.bashrc? Realmente no lo se.

Luego busqué systemdservicios relevantes , pero solo encontré ssh.service, que es WantedBy=multi-user.target, y por lo tanto no se ejecuta al iniciar sesión (y bueno, eso es obvio ya que este es el demonio del servidor SSH).

También intenté mover todos los archivos de mi /home/picarpeta a una carpeta temporal y cerrar sesión y volver a iniciarla, pero ssh-agentaún así se generó.

Eventualmente, también disparé el último disparo que tuve en la cámara: corrí find / -name 'ssh-agent'como root, que solo imprimió /usr/bin/ssh-agent, un ejecutable, así que creé un ejecutable falso que básicamente solo registró el comando principal :

#! /bin/bash
ps -o args= $PPID        > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG

Cambié el nombre del real /usr/bin/ssh-agenty lo reemplacé con el falso configurando los permisos / usuario / grupo correctos, ejecuté source ~/.bashrcnuevamente, luego imprimí el LOGarchivo:

-bash
-bash

Ni una sola pista de lo que está sucediendo.

Algunos mas detalles

Estoy agregando algunos detalles más, no sé si podrían ser útiles o no, pero ya sabes ... más vale prevenir que curar.

  • Aquí está mi .bashrc.

  • Creé un nuevo usuario llamado dummyusando useradd -m dummy, e iniciar sesión en él no comienza ningunossh-agent (siento que esto podría significar algo). El diff /home/pi/.bashrc /home/dummy/.bashrcprograma básicamente no es nada (solo un comentario que hice), lo mismo para diff /home/pi/.profile /home/dummy/.profile.

  • El socket del agente se crea sin problemas aunque SSH_AUTH_SOCKno esté configurado:

    pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/
    total 0
    srw------- 1 pi pi 0 Jan 28 03:12 agent.1328
    

    No estoy seguro de por qué, pero el número en el nombre del archivo del socket siempre es el que está inmediatamente antes del PID del ssh-agentproceso.

  • Fragmento de htop:

     PID  USER  PRI  NI  VIRT   RES   SHR  S  Command
       1  root   20   0  5472  3900  2728  S  /sbin/init
    1329  pi     20   0  3696   224    16  S  └─ ssh-agent -s
    
  • Paquetes instalados que coinciden ssh:

    pi:~$ apt list --installed | grep ssh
    libpam-chksshpwd/oldstable,now 1.1.8-3.1+deb8u2+rpi3 armhf [installed]
    libssh-gcrypt-4/oldstable,now 0.6.3-4+deb8u2 armhf [installed,automatic]
    libssh2-1/oldstable,now 1.4.3-4.1+deb8u1 armhf [installed,automatic]
    openssh-client/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    openssh-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    openssh-sftp-server/oldstable,now 1:6.7p1-5+deb8u4 armhf [installed,automatic]
    ssh/oldstable,now 1:6.7p1-5+deb8u4 all [installed]
    sshpass/oldstable,now 1.05-1 armhf [installed]
    
  • La búsqueda de ssh-agent -suso recursivo grepen /etcy /libno produce resultados.

  • No tengo instalado un entorno de escritorio, pero tengo una /etc/X11carpeta con algunos archivos de configuración. Intenté cambiar el nombre de la carpeta a otra cosa y reiniciar por si acaso, pero el proceso aún se genera, por lo que aparentemente eso no tiene mucho que ver con esto.


Conclusión

Ahora, para hacerlo lo más simple posible, solo tengo dos preguntas:

  1. ¿Dónde y cómo se ssh-agentgenera esto , quién emite el comando?
  2. ¿Por qué no se llama de la manera adecuada, sin establecer las variables de entorno necesarias y, por lo tanto, dejar que el proceso se quede allí indefinidamente?

Me pregunto qué tienes en tu ~/.bashrcentonces.
ilkkachu

@ilkkachu bueno, aquí tienes ...
Marco Bonelli

Respuestas:


1

Conozco un par de posibles razones:

  • si está utilizando libpam-ssh, puede iniciar automáticamente un agente SSH para usted como parte del inicio de una sesión, e incluso cargar automáticamente sus claves si no tienen frase de contraseña o si su frase de contraseña es la misma que su contraseña de inicio de sesión.

  • si está utilizando gpg-agent, opcionalmente también puede realizar la tarea del ssh-agent. Su apagado se maneja de manera diferente, por lo que solo habrá la SSH_AUTH_SOCKvariable de entorno, no elSSH_AGENT_PID

  • si tiene un agente SSH (por ejemplo, el concurso de PuTTY) ejecutándose en su estación de trabajo y establece una conexión SSH con el reenvío del agente habilitado (y el control remoto lo sshdpermite), en el host remoto volverá a ver solo SSH_AUTH_SOCKsin el SSH_AGENT_PID... porque el conector del agente va a sshdqué túneles lo devuelve al agente SSH de su estación de trabajo local.


1
Gracias por las sugerencias, pero desafortunadamente ninguna de esas opciones se aplica a mí. No tengo libpam-ssh; ambos SSH_AGENT_PIDy no SSH_AUTH_SOCKestán configurados (el zócalo, por supuesto, está presente de todos modos); No uso gpg-agenty no tengo el reenvío de agente habilitado en PuTTY. Estoy realmente perdido: \
Marco Bonelli
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.