Ssh-ajanımı kim başlatıyor ve neden düzgün bir şekilde sonlandırılmıyor?


9

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-agentiş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 okudumexitssh-agentssh-agentsource ~/.bashrcssh-agentortam değişkeninin SSH_AGENT_PIDtanımlanması gerekir, çünkü ssh-agentprogram 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_PIDve echo $SSH_AUTH_SOCKfakat ikisi de boştu. Aniden fark ettim: Muhtemelen süreç çıkışta öldürülmüyor çünkü ssh-agent -kPID'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-agentgiriş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-agentHer 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 viyapmaya 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 ~/.bashrcmı? Gerçekten bilmiyorum.

Sonra ben alakalı aradı systemdhizmetler , ama sadece bulundu ssh.serviceki, 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/pigeçici bir klasöre klasörün ve çıkış yaptıktan ve tekrar tekrar, ama ssh-agentyine 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-agentdeğiştirdim ve doğru izinleri / kullanıcı / grubu ayarlayan sahte biriyle değiştirdim, source ~/.bashrctekrar koştum , sonra LOGdosyayı 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.

  • dummyUsing adlı yeni bir kullanıcı oluşturdum useradd -m dummyve giriş yapmak hiç başlamıyorssh-agent (bunun bir şey ifade edebileceğini düşünüyorum). diff /home/pi/.bashrc /home/dummy/.bashrcAynı gösterileri temelde hiçbir şey (yaptığım sadece bir yorum) diff /home/pi/.profile /home/dummy/.profile.

  • Aracı soketi SSH_AUTH_SOCKayarlanmamış 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-agentiş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 -syinelemeli kullanarak grepiçinde /etcve /libhiçbir sonuç verimleri.

  • Yüklü masaüstü ortamım yok, ancak /etc/X11iç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:

  1. Bu nerede ve nasıl ssh-agentortaya çıkıyor, emri kim veriyor?
  2. 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?

O zamanda ne olduğunu merak ediyorum ~/.bashrc.
ilkkachu

@ilkkachu iyi, işte gidiyorsun ...
Marco Bonelli

Yanıtlar:


1

Birkaç olası nedeni biliyorum:

  • kullanıyorsanız libpam-ssh, oturum başlatma işleminin bir parçası olarak sizin için otomatik olarak bir SSH aracısı başlatabilir ve hatta parolaları yoksa veya parolaları oturum açma parolanızla aynı ise, anahtarlarınızı otomatik olarak yükleyebilir.

  • kullanıyorsanız gpg-agent, isteğe bağlı olarak da görevini yerine getirebilir ssh-agent. Kapatılması farklı şekilde ele alındığından, yalnızca SSH_AUTH_SOCKortam değişkeni olacaktır,SSH_AGENT_PID

  • Eğer SSH-agent (örn PuTTY en Yarışması) iş istasyonunda çalışan varsa ve yaparsanız ajan yönlendirme ile SSH bağlantısı etkin (ve uzaktan sshdtekrar sadece göreceksiniz uzak ana bilgisayarda, izin veriyorsa) SSH_AUTH_SOCKolmadan SSH_AGENT_PID... ajan soketine çünkü sshdhangi tünelde yerel iş istasyonunuzun SSH temsilcisine geri döndüğüne gider .


1
Öneriler için teşekkür ederim, ancak maalesef bu seçeneklerin hiçbiri benim için geçerli değil. Bende yok libpam-ssh; hem SSH_AGENT_PIDve SSH_AUTH_SOCK(soket şüphesiz mevcut olsa bu ise) sertleşmemiş olan; gpg-agentPuTTY üzerinde kullanmıyorum ve aracı yönlendirmeyi etkinleştirmedim. Gerçekten kayboldum: \
Marco Bonelli
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.