Questo è un problema che ho da molto tempo, ma ogni volta che provo a capire qualcosa mi perdo, quindi ho pensato che sarebbe meglio chiedere qui dove forse qualcuno più esperto potrebbe aiutarmi.
sfondo
Il mio Raspberry Pi esegue Raspbian Jessie e utilizzo spesso SSH per accedervi ed eseguire comandi da remoto. Durante le mie prime sessioni SSH ho notato che un ssh-agentprocesso veniva generato su RPi ogni volta che eseguivo l' accesso, ma non veniva mai ucciso durante l' exiting: il login e il logout diverse volte causavano la generazione di un sacco di ssh-agentprocessi solo per essere lasciati appesi lì senza fare nulla. Giocherellando e leggendo pagine man e risposte qua e là, di recente ho capito lo scopo ssh-agente ho anche imparato che normalmente dovrebbe essere ucciso quando ci si disconnette, quindi ho iniziato a chiedermi perché non lo fosse. Inoltre, ho notato che l'emissione source ~/.bashrcprovoca la generazione di un'altra istanza ssh-agent. Ho letto sulla relativa pagina manche la variabile di ambiente SSH_AGENT_PIDdovrebbe essere definita perché il ssh-agentprogramma dovrebbe essere avviato all'interno di un evalper eseguire il suo output e definire tali variabili, che sono quindi utilizzate da altri comandi relativi a SSH, incluso ssh-agent -k(per uccidere l'agente rispetto alla sessione corrente), quindi I corse echo $SSH_AGENT_PIDe echo $SSH_AUTH_SOCK, ma erano entrambi vuoti. All'improvviso mi sono reso conto: probabilmente il processo non viene interrotto al logout perché ssh-agent -ktenta di leggere il suo PID dalla variabile di ambiente che non è impostata.
Il problema
Dal momento che ssh-agentnon viene ucciso al logout, e questo accade di sicuro perché le variabili di ambiente necessarie non sono impostate, può significare solo una cosa: chiunque chiami ssh-agental login probabilmente non lo fa nel modo corretto (che sarebbe eval "$(ssh-agent -s)") . Quindi ho pensato: beh, qual è il problema? Troverò semplicemente qualsiasi file di configurazione, servizio o script di accesso eseguito per avviare l'agente e risolverlo manualmente! Dove diavolo potrebbe essere?
Quello che ho provato
Dal momento che ho notato che ssh-agentviene generato un ogni volta che chiamo source ~/.bashrc, questo è stato il primo file che ho ispezionato, ma nulla di ciò ha fatto riferimento in remoto a qualcosa correlato a SSH. Ho continuato a cercare vila stringa sshall'interno di tutti i seguenti file, ma non ho trovato nulla :
~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment
C'è qualche altro file che potrebbe essere coinvolto source ~/.bashrc? Non lo so davvero.
Quindi ho cercato i systemdservizi pertinenti , ma ho trovato solo ciò ssh.serviceche è WantedBy=multi-user.target, e quindi non viene eseguito all'accesso (e bene, questo è ovvio poiché si tratta del demone del server SSH).
Ho anche provato a spostare ogni singolo file nella mia /home/picartella in una cartella temporanea e disconnettermi e riconnetterlo, ma ho ssh-agentcomunque generato.
Alla fine, ho anche sparato l'ultimo colpo che avevo nella camera: correvo find / -name 'ssh-agent'come root, che stampava solo /usr/bin/ssh-agent, un eseguibile, quindi ho creato un eseguibile falso che praticamente registrava solo il comando genitore :
#! /bin/bash
ps -o args= $PPID > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG
Ho rinominato il reale /usr/bin/ssh-agente lo ho sostituito con quello falso impostando le autorizzazioni / utente / gruppo corretti, ho eseguito di source ~/.bashrcnuovo, quindi ho stampato il LOGfile:
-bash
-bash
Non c'è un solo indizio su cosa stia succedendo.
Qualche dettaglio in più
Sto aggiungendo altri dettagli, non so se potrebbero essere utili o meno, ma sai ... meglio prevenire che curare.
Ecco la mia
.bashrc.Ho creato un nuovo utente chiamato
dummyusandouseradd -m dummy, e accedendo non si avvia alcunossh-agent(penso che questo potrebbe significare qualcosa). Lodiff /home/pi/.bashrc /home/dummy/.bashrcspettacolo praticamente nulla (solo un commento che ho fatto), lo stesso perdiff /home/pi/.profile /home/dummy/.profile.Il socket dell'agente viene creato senza problemi anche se
SSH_AUTH_SOCKnon è impostato:pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/ total 0 srw------- 1 pi pi 0 Jan 28 03:12 agent.1328Non so perché, ma il numero sul nome file del socket è sempre quello immediatamente precedente al PID del
ssh-agentprocesso.Snippet di
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 -sCorrispondenza dei pacchetti installati
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 ricerca
ssh-agent -sricorsiva utilizzandogrepin/etce/libnon produce risultati.Non ho installato un ambiente desktop, ma ho una
/etc/X11cartella con alcuni file di configurazione. Ho provato a rinominare la cartella in qualcos'altro e riavviare per ogni evenienza, ma il processo viene comunque generato, quindi apparentemente non ha molto a che fare con questo.
Conclusione
Ora, per renderlo il più semplice possibile, ho solo due domande:
- Dove e come viene
ssh-agentgenerato, chi emette il comando? - Perché non viene chiamato nel modo corretto, senza impostare le variabili di ambiente necessarie e quindi lasciare il processo appeso lì indefinitamente?
~/.bashrcallora.