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 erstelltuseradd -m dummy, und die Anmeldung startet keinenssh-agent(ich glaube, dies könnte etwas bedeuten). Dasdiff /home/pi/.bashrc /home/dummy/.bashrczeigt im Grunde nichts (nur ein Kommentar, den ich gemacht habe), das gleiche fürdiff /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.1328Ich 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 -sInstallierte 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 mitgrepin/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:
- Wo und wie entsteht das
ssh-agent, wer gibt den Befehl aus? - Warum wird es nicht ordnungsgemäß aufgerufen, ohne die erforderlichen Umgebungsvariablen festzulegen und den Prozess daher unbegrenzt hängen zu lassen?
~/.bashrc.