Siapa yang memulai agen ssh saya, dan mengapa itu tidak akan berakhir dengan baik?

9

Ini adalah masalah yang sudah lama saya alami, tetapi setiap kali saya mencoba untuk mencari tahu saya tersesat, jadi saya pikir saya sebaiknya bertanya di sini di mana mungkin seseorang yang lebih berpengalaman dapat membantu saya.

Latar Belakang

Raspberry Pi saya menjalankan Raspbian Jessie, dan saya sering menggunakan SSH untuk masuk ke dalamnya dan menjalankan perintah dari jarak jauh. Selama sesi SSH pertama saya, saya perhatikan bahwa suatu ssh-agentproses muncul pada RPi setiap kali saya login, tetapi tidak pernah terbunuh ketika exit: masuk dan keluar beberapa kali menyebabkan banyak ssh-agentproses yang muncul hanya untuk dibiarkan menggantung di sana tidak melakukan apa-apa. Mengotak-atik dan membaca halaman manual dan jawaban di sana-sini, saya baru-baru ini memahami tujuan ssh-agent, dan saya juga belajar bahwa itu seharusnya terbunuh ketika logout, jadi saya mulai bertanya pada diri sendiri mengapa tidak. Lebih jauh, saya perhatikan bahwa penerbitan source ~/.bashrcmenyebabkan turunan lain ssh-agent. Saya membaca di halaman manual relatifbahwa variabel lingkungan SSH_AGENT_PIDharus didefinisikan karena ssh-agentprogram harus dimulai di dalam evaluntuk mengeksekusi output dan mendefinisikan variabel-variabel tersebut, yang kemudian digunakan oleh perintah terkait SSH lainnya, termasuk ssh-agent -k(untuk membunuh agen relatif terhadap sesi saat ini), jadi saya berlari echo $SSH_AGENT_PIDdan echo $SSH_AUTH_SOCK, tetapi mereka berdua kosong. Tiba-tiba saya menyadari: mungkin prosesnya tidak terbunuh saat keluar karena ssh-agent -kmencoba membaca PID-nya dari variabel lingkungan yang tidak disetel.

Masalah

Karena ssh-agenttidak terbunuh saat keluar, dan ini pasti terjadi karena variabel lingkungan yang diperlukan tidak disetel, itu hanya dapat berarti satu hal: siapa pun yang memanggil ssh-agentmasuk mungkin tidak melakukannya dengan cara yang benar (yang akan menjadi eval "$(ssh-agent -s)") . Jadi saya berpikir: apa masalahnya? Saya hanya akan menemukan file konfigurasi, layanan, atau skrip login mana saja yang dijalankan untuk memulai agen dan memperbaikinya secara manual! Di mana di bumi ini?

Apa yang saya coba

Karena saya perhatikan bahwa sebuah ssh-agentmenelurkan setiap kali saya menelepon source ~/.bashrc, ini adalah file pertama yang saya periksa, tetapi tidak ada bahkan di sana yang mereferensikan apa pun yang berhubungan dengan SSH. Saya terus mencari menggunakan vistring sshdi dalam semua file berikut, tetapi tidak menemukan apa pun :

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

Apakah ada beberapa file lagi yang bisa terlibat source ~/.bashrc? Saya tidak begitu tahu.

Kemudian saya mencari systemdlayanan yang relevan , tetapi hanya menemukan ssh.service, yang WantedBy=multi-user.target, dan karena itu tidak berjalan saat login (dan yah, itu jelas karena ini adalah daemon server SSH).

Saya juga mencoba memindahkan setiap file di /home/pifolder saya ke folder sementara dan keluar dan kembali lagi, tetapi ssh-agentmasih muncul.

Akhirnya, saya juga menembakkan tembakan terakhir yang saya miliki di kamar: Saya berlari find / -name 'ssh-agent'sebagai root, yang hanya dicetak /usr/bin/ssh-agent, yang dapat dieksekusi, jadi saya membuat executable palsu yang pada dasarnya hanya mencatat perintah induk :

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

Saya mengganti nama yang asli /usr/bin/ssh-agentdan menggantinya dengan yang palsu mengatur hak akses / pengguna / grup, berlari source ~/.bashrclagi, lalu mencetak LOGfile:

-bash
-bash

Tidak ada satu pun petunjuk tentang apa yang sedang terjadi.

Lebih detail

Saya menambahkan beberapa detail lagi, saya tidak tahu apakah itu bisa membantu atau tidak, tetapi Anda tahu ... lebih aman daripada menyesal.

  • Ini milik saya .bashrc.

  • Saya membuat pengguna baru bernama dummymenggunakan useradd -m dummy, dan masuk ke dalamnya tidak memulai apa punssh-agent (saya merasa ini bisa berarti sesuatu). The diff /home/pi/.bashrc /home/dummy/.bashrcshow pada dasarnya tidak ada (hanya komentar saya membuat), yang sama untuk diff /home/pi/.profile /home/dummy/.profile.

  • Soket agen dibuat tanpa masalah meskipun SSH_AUTH_SOCKtidak disetel:

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

    Tidak yakin mengapa, tetapi nomor pada nama file soket selalu yang tepat sebelum PID ssh-agentproses.

  • Cuplikan dari 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
    
  • Paket terinstal yang cocok 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]
    
  • Mencari ssh-agent -smenggunakan secara grepmasuk /etcdan /libtidak menghasilkan apa-apa.

  • Saya tidak memiliki lingkungan desktop yang diinstal, tetapi saya memiliki /etc/X11folder dengan beberapa file konfigurasi di dalamnya. Saya mencoba mengubah nama folder menjadi sesuatu yang lain dan mem-boot ulang untuk berjaga-jaga, tetapi prosesnya masih muncul, jadi sepertinya itu tidak ada hubungannya dengan ini.


Kesimpulan

Sekarang, untuk membuatnya sesederhana mungkin, saya hanya punya dua pertanyaan:

  1. Di mana dan bagaimana hal ini terjadi ssh-agent, siapa yang mengeluarkan perintah?
  2. Mengapa tidak dipanggil dengan cara yang tepat, tanpa menetapkan variabel lingkungan yang diperlukan, dan karena itu meninggalkan proses untuk menggantung di sana tanpa batas?
Marco Bonelli
sumber
Saya bertanya-tanya apa yang Anda miliki ~/.bashrcsaat itu.
ilkkachu
@ilkkachu yah, ini dia ...
Marco Bonelli

Jawaban:

1

Saya tahu beberapa kemungkinan alasan:

  • jika Anda menggunakan libpam-ssh, itu dapat secara otomatis memulai agen SSH untuk Anda sebagai bagian dari sesi awal, dan bahkan secara otomatis memuat kunci Anda jika mereka tidak memiliki kata sandi atau kata sandi mereka sama dengan kata sandi login Anda.

  • jika Anda menggunakan gpg-agent, secara opsional dapat melakukan tugas ssh-agentjuga. Shut-down ditangani secara berbeda, jadi hanya akan ada SSH_AUTH_SOCKvariabel lingkungan, bukanSSH_AGENT_PID

  • jika Anda memiliki SSH-agent (mis. Putty's Pageant) berjalan di workstation Anda dan membuat koneksi SSH dengan forwarding agen diaktifkan (dan remote sshdmemungkinkannya), pada host jarak jauh Anda akan kembali melihat hanya SSH_AUTH_SOCKtanpa SSH_AGENT_PID... karena soket agen pergi ke sshdmana terowongan itu kembali ke agen SSH workstation lokal Anda.

telcoM
sumber
1
Terima kasih atas sarannya, tetapi sayangnya tidak ada opsi itu yang berlaku untuk saya. Saya tidak punya libpam-ssh; keduanya SSH_AGENT_PIDdan SSH_AUTH_SOCKtidak disetel (soket tentu saja ada); Saya tidak menggunakan gpg-agentdan tidak memiliki penerusan agen diaktifkan pada Putty. Saya benar-benar bingung: \
Marco Bonelli