Wer startet meinen SSH-Agenten und warum wird er nicht ordnungsgemäß beendet?

9

Dies ist ein Problem, das ich schon lange habe, aber jedes Mal, wenn ich versuche, etwas herauszufinden, verliere ich mich. Deshalb dachte ich mir, ich sollte hier besser fragen, wo mir vielleicht jemand mit mehr Erfahrung helfen könnte.

Hintergrund

Auf meinem Raspberry Pi wird Raspbian Jessie ausgeführt, und ich verwende SSH häufig, um mich anzumelden und Befehle remote auszuführen. Während meiner ersten SSH-Sitzungen bemerkte ich, dass jedes Mal, wenn ich mich anmeldete , ein ssh-agentProzess auf dem RPi erzeugt wurde , der jedoch beim exitAnmelden nie beendet wurde : Durch mehrmaliges An- und Abmelden wurden eine Reihe von ssh-agentProzessen erzeugt, die nur hängen blieben und nichts taten. Ich habe hier und da herumgespielt und Manpages und Antworten gelesen. Ich habe kürzlich den Zweck von verstanden ssh-agentund auch gelernt, dass es normalerweise beim Abmelden getötet werden sollte, also begann ich mich zu fragen, warum es nicht so war. Außerdem habe ich festgestellt, dass durch das Ausgeben source ~/.bashrceine weitere Instanz von erzeugt wird ssh-agent. Ich habe auf der entsprechenden Manpage gelesendass die Umgebungsvariable definiert werden SSH_AGENT_PIDsollte, weil das ssh-agentProgramm innerhalb von gestartet werden sollte eval, um seine Ausgabe auszuführen und solche Variablen zu definieren, die dann von anderen SSH-bezogenen Befehlen verwendet werden, einschließlich ssh-agent -k(um den Agenten relativ zur aktuellen Sitzung zu beenden), also I. lief echo $SSH_AGENT_PIDund echo $SSH_AUTH_SOCK, aber sie waren beide leer. Mir wurde plötzlich klar: Wahrscheinlich wird der Prozess beim Abmelden nicht abgebrochen, weil ssh-agent -kversucht wird, seine PID aus der nicht festgelegten Umgebungsvariablen zu lesen.

Das Problem

Da ssh-agentdies beim Abmelden nicht beendet wird und dies sicher geschieht, weil die erforderlichen Umgebungsvariablen nicht festgelegt sind, kann dies nur eines bedeuten: Wer sich ssh-agentanmeldet, tut dies wahrscheinlich nicht ordnungsgemäß (was der Fall wäre eval "$(ssh-agent -s)") . Also dachte ich: Nun, was ist das Problem? Ich finde nur die Konfigurationsdatei, den Dienst oder das Anmeldeskript, die ausgeführt werden, um den Agenten zu starten und manuell zu reparieren! Wo um alles in der Welt könnte es sein?

Was ich versucht habe

Da ich bemerkte, dass ssh-agentjedes Mal source ~/.bashrc, wenn ich anrufe, ein erscheint , war dies die erste Datei, die ich inspizierte, aber nichts dort verwies auch nur aus der Ferne auf irgendetwas, das mit SSH zu tun hatte. Ich habe in allen folgenden Dateien vinach der Zeichenfolge gesucht ssh, aber nichts gefunden :

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

Gibt es noch weitere Dateien, an denen beteiligt sein könnte source ~/.bashrc? Ich weiß es nicht wirklich.

Dann habe ich nach relevanten systemdDiensten gesucht , aber nur gefunden ssh.service, was ist WantedBy=multi-user.targetund daher nicht beim Login ausgeführt wird (und das ist offensichtlich, da dies der SSH-Server-Daemon ist).

Ich habe auch versucht, jede einzelne Datei in meinem /home/piOrdner in einen temporären Ordner zu verschieben und mich abzumelden und wieder anzumelden, bin aber ssh-agenttrotzdem aufgetaucht.

Schließlich habe ich auch den letzten Schuss abgefeuert, den ich in der Kammer hatte: Ich lief find / -name 'ssh-agent'als root, der nur /usr/bin/ssh-agenteine ausführbare Datei druckte , also erstellte ich eine gefälschte ausführbare Datei, die im Grunde nur den übergeordneten Befehl protokollierte :

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

Ich habe den Real umbenannt /usr/bin/ssh-agentund durch den falschen ersetzt, der die richtigen Berechtigungen / Benutzer / Gruppen festlegt, source ~/.bashrcerneut ausgeführt und dann die LOGDatei gedruckt :

-bash
-bash

Kein einziger Hinweis darauf, was los ist.

Einige weitere Details

Ich füge noch einige Details hinzu, ich weiß nicht, ob sie hilfreich sein könnten oder nicht, aber Sie wissen ... besser sicher als leid.

  • Hier ist meine .bashrc.

  • Ich habe einen neuen Benutzer mit dem Namen dummyusing erstellt useradd -m dummy, und die Anmeldung startet keinenssh-agent (ich glaube, dies könnte etwas bedeuten). Das diff /home/pi/.bashrc /home/dummy/.bashrczeigt im Grunde nichts (nur ein Kommentar, den ich gemacht habe), das gleiche für diff /home/pi/.profile /home/dummy/.profile.

  • Der Agent-Socket wird problemlos erstellt, obwohl er SSH_AUTH_SOCKnicht festgelegt ist:

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

    Ich weiß nicht warum, aber die Nummer im Socket-Dateinamen ist immer die Nummer unmittelbar vor der PID des ssh-agentProzesses.

  • Ausschnitt aus 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
    
  • Installierte Pakete passend 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]
    
  • Die Suche nach ssh-agent -srekursiv mit grepin /etcund /libliefert keine Ergebnisse.

  • Ich habe keine Desktop-Umgebung installiert, aber ich habe einen /etc/X11Ordner mit einigen Konfigurationsdateien. Ich habe versucht, den Ordner in etwas anderes umzubenennen und für alle Fälle neu zu starten, aber der Prozess wird immer noch erzeugt, so dass das anscheinend nicht viel damit zu tun hat.


Fazit

Um es so einfach wie möglich zu machen, habe ich nur zwei Fragen:

  1. Wo und wie entsteht das ssh-agent, wer gibt den Befehl aus?
  2. Warum wird es nicht ordnungsgemäß aufgerufen, ohne die erforderlichen Umgebungsvariablen festzulegen und den Prozess daher unbegrenzt hängen zu lassen?
Marco Bonelli
quelle
Ich frage mich, was Sie dann in Ihrem haben ~/.bashrc.
Ilkkachu
@ilkkachu gut, hier gehen Sie ...
Marco Bonelli

Antworten:

1

Ich kenne ein paar mögliche Gründe:

  • Wenn Sie verwenden libpam-ssh, kann es im Rahmen eines Sitzungsstarts automatisch einen SSH-Agenten für Sie starten und Ihre Schlüssel sogar automatisch laden, wenn sie entweder keine Passphrase haben oder ihre Passphrase mit Ihrem Anmeldekennwort übereinstimmt.

  • Wenn Sie verwenden gpg-agent, kann es optional auch die Aufgabe des ausführen ssh-agent. Das Herunterfahren wird anders gehandhabt, daher gibt es nur die SSH_AUTH_SOCKUmgebungsvariable, nicht dieSSH_AGENT_PID

  • wenn Sie SSH-Agenten (zB PuTTY Festzug) läuft auf der Workstation und machen eine SSH - Verbindung mit Agenten - Forwarding aktiviert ist (und die Fernbedienung sshdermöglicht es), auf dem Remote - Host werden Sie wieder nur sehen , SSH_AUTH_SOCKohne das SSH_AGENT_PID... weil der Agent Buchse Geht zu sshdwelchen Tunneln es zurück zum SSH-Agenten Ihrer lokalen Workstation.

telcoM
quelle
1
Vielen Dank für die Vorschläge, aber leider trifft keine dieser Optionen auf mich zu. Ich habe nicht libpam-ssh; beide SSH_AGENT_PIDund SSH_AUTH_SOCKsind nicht gesetzt (die Steckdose ist natürlich sowieso vorhanden); Ich verwende gpg-agentund habe keine Agentenweiterleitung für PuTTY aktiviert. Ich bin wirklich verloren: \
Marco Bonelli