Bu uzun zamandır yaşadığım bir sorun, ama her zaman bir şey bulmaya çalıştığımda kayboluyorum, bu yüzden burada daha deneyimli birinin bana nasıl yardımcı olabileceğini sorsam iyi olur.
Arka fon
Raspberry Pi'm Raspbian Jessie çalıştırıyor ve SSH'yi sık sık oturum açmak ve komutları uzaktan çalıştırmak için kullanıyorum. İlk SSH oturumlarım sırasında , RPi'de her giriş yaptığımda bir ssh-agent
işlemin ortaya çıktığını fark ettim , ancak ing: asla birkaç kez giriş ve çıkış yapmak, bir sürü işlemin orada hiçbir şey yapmadan asılı bırakılmasına neden oldu . Etrafta dolaşıp adam sayfalarını ve cevaplarını burada ve orada okudum ve son zamanlarda amacını anladım ve ayrıca çıkış yaparken normalde öldürülmesi gerektiğini öğrendim, bu yüzden kendime neden olmadığını sormaya başladım. Ayrıca, ihraç etmenin başka bir örneğinin ortaya çıkmasına neden olduğunu fark ettim . Göreceli adam sayfasında okudumexit
ssh-agent
ssh-agent
source ~/.bashrc
ssh-agent
ortam değişkeninin SSH_AGENT_PID
tanımlanması gerekir, çünkü ssh-agent
program eval
çıktısını yürütmek ve daha sonra ssh-agent -k
(mevcut oturuma göre aracıyı öldürmek için) dahil olmak üzere diğer SSH ile ilgili komutlar tarafından kullanılan bu değişkenleri tanımlamak için bir içinde başlatılmalıdır. ran echo $SSH_AGENT_PID
ve echo $SSH_AUTH_SOCK
fakat ikisi de boştu. Aniden fark ettim: Muhtemelen süreç çıkışta öldürülmüyor çünkü ssh-agent -k
PID'sini ayarlanmamış ortam değişkeninden okumaya çalışıyor.
Sorun
Yana ssh-agent
çıkış yapınca öldürüldü ve herhalde bu gerekli ortam değişkenleri ayarlanmadığı için, sadece ortalama bir şey olabilir olmuyor değil: çağrıları kim ssh-agent
girişte muhtemelen (olurdu düzgün bir şekilde bunu yapmaz eval "$(ssh-agent -s)"
) . Ben de düşündüm: sorun ne? Sadece aracıyı başlatmak ve el ile düzeltmek için hangi yapılandırma dosyası, hizmet veya giriş komut dosyası çalıştırılırsa bulacağım! Nerede olabilir?
Ne denedim
ssh-agent
Her aradığımda bir yumurtlandığını fark ettiğimden source ~/.bashrc
, bu ilk denetlediğim dosyaydı, ama orada hiçbir şey uzaktan SSH ile ilgili bir şeye bile atıfta bulunmadı. Aşağıdaki dosyaların içindeki dizeyi kullanarak arama vi
yapmaya devam ettim ssh
, ancak hiçbir şey bulamadım :
~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment
Dahil olabilecek başka bir dosya var source ~/.bashrc
mı? Gerçekten bilmiyorum.
Sonra ben alakalı aradı systemd
hizmetler , ama sadece bulundu ssh.service
ki, WantedBy=multi-user.target
(bu SSH sunucusu servistir beri aşikar olduğunu, iyi ve) ve bu nedenle giriş koşmak değildir.
Ben de benim her bir dosya hareketli çalıştı /home/pi
geçici bir klasöre klasörün ve çıkış yaptıktan ve tekrar tekrar, ama ssh-agent
yine de daha çıktı.
Sonunda, ben de odada son atış ateş: Ben find / -name 'ssh-agent'
sadece yazdırılan /usr/bin/ssh-agent
, bir yürütülebilir, kök olarak koştu , bu yüzden temelde sadece ana komut günlüğe sahte bir yürütülebilir dosya oluşturdum :
#! /bin/bash
ps -o args= $PPID > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG
Gerçek adını /usr/bin/ssh-agent
değiştirdim ve doğru izinleri / kullanıcı / grubu ayarlayan sahte biriyle değiştirdim, source ~/.bashrc
tekrar koştum , sonra LOG
dosyayı yazdırdım :
-bash
-bash
Neler olduğuna dair tek bir ipucu değil.
Bazı ayrıntılar
Daha fazla ayrıntı ekliyorum, yararlı olup olmadıklarını bilmiyorum, ama biliyorsunuz ... üzgünümden daha güvenli.
İşte benim
.bashrc
.dummy
Using adlı yeni bir kullanıcı oluşturdumuseradd -m dummy
ve giriş yapmak hiç başlamıyorssh-agent
(bunun bir şey ifade edebileceğini düşünüyorum).diff /home/pi/.bashrc /home/dummy/.bashrc
Aynı gösterileri temelde hiçbir şey (yaptığım sadece bir yorum)diff /home/pi/.profile /home/dummy/.profile
.Aracı soketi
SSH_AUTH_SOCK
ayarlanmamış olsa bile sorunsuz bir şekilde oluşturulur :pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/ total 0 srw------- 1 pi pi 0 Jan 28 03:12 agent.1328
Neden olduğundan emin değilsiniz, ancak soket dosya adındaki sayı her zaman
ssh-agent
işlemin PID'sinden hemen önceki sayıdır .Snippet
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
Yüklü paketler eşleşiyor
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]
Aranıyor
ssh-agent -s
yinelemeli kullanarakgrep
içinde/etc
ve/lib
hiçbir sonuç verimleri.Yüklü masaüstü ortamım yok, ancak
/etc/X11
içinde bazı yapılandırma dosyaları olan bir klasör var. Klasörü başka bir şeye yeniden adlandırmayı ve her durumda yeniden başlatmayı denedim, ancak süreç hala ortaya çıkıyor, bu yüzden görünüşe göre bununla çok fazla bir ilgisi yok.
Sonuç
Şimdi, mümkün olduğunca basitleştirmek için, sadece iki sorum var:
- Bu nerede ve nasıl
ssh-agent
ortaya çıkıyor, emri kim veriyor? - Neden gerekli ortam değişkenlerini ayarlamadan ve bu nedenle süreci süresiz olarak orada bekletmeye bırakmadan doğru şekilde çağrılmıyor?
~/.bashrc
.