Це проблема, з якою я стикаюсь давно, але кожного разу, коли намагаюся щось розібратися, я гублюсь, тому я зрозуміла, що краще запитати тут, де, можливо, мені може допомогти хтось більш досвідчений.
Фон
Мій Raspberry Pi працює Raspbian Jessie, і я часто використовую SSH, щоб увійти в нього і виконувати команди віддалено. Під час моїх перших сеансів SSH я помітив, що ssh-agent
процес з'являється на RPi кожного разу, коли я входив у систему, але ніколи не вбивався під час exit
ing: вхід і вихід кілька разів спричиняли купу спалахуssh-agent
процесів, просто щоб він не залишався там, щоб нічого не робити. Обмацуючи та читаючи чоловічі сторінки та відповіді тут і там, я нещодавно зрозумів мету ssh-agent
, а також довідався, що це нормально вбивається під час виходу, тому я почав запитувати себе, чому це не так. Крім того, я помітив, що видача source ~/.bashrc
спричиняє виникнення ще одного примірника ssh-agent
. Я читаю на сторінці відносної людинищо змінна середовища SSH_AGENT_PID
повинна бути визначена, тому що ssh-agent
програма повинна бути запущена в межах eval
для виконання її виводу та визначення таких змінних, які потім використовуються іншими командами, пов'язаними з SSH, включаючи ssh-agent -k
(для вбивства агента відносно поточного сеансу), тому я побігли echo $SSH_AGENT_PID
і echo $SSH_AUTH_SOCK
, але вони обоє порожні. Я раптом зрозумів: ймовірно, процес не вбивається під час виходу, оскільки ssh-agent -k
намагається прочитати його PID із змінної середовища, яка не встановлена.
Проблема
Оскільки ssh-agent
він не вбивається під час виходу, і це напевно відбувається, оскільки необхідні змінні середовища не встановлені, це може означати лише одне: той, хто звертається ssh-agent
до входу, мабуть, не робить це належним чином (що було б eval "$(ssh-agent -s)"
) . Тому я подумав: ну, в чому проблема? Я просто знайду файл конфігурації, службу або скрипт для входу для запуску агента та виправлення вручну! Де на землі це могло бути?
Що я спробував
Оскільки я зауважив, що ssh-agent
породжується повідомлення щоразу, коли я дзвоню source ~/.bashrc
, це був перший файл, який я перевірив, але нічого там навіть віддалено не посилалося на щось, що стосується SSH. Я продовжував шукати vi
рядок ssh
у всіх наступних файлах, але нічого не знайшов :
~/.bashrc
~/.profile
/etc/bash.bashrc
/etc/profile
/etc/profile.d/ (every file in this folder)
/etc/environment
Чи є ще якийсь файл, до якого можна було б долучитися source ~/.bashrc
? Я насправді не знаю.
Тоді я шукав відповідні systemd
сервіси , але знайшов лише те ssh.service
, що є WantedBy=multi-user.target
, і тому не запускається при вході (і добре, що очевидно, оскільки це демон сервера SSH).
Я також намагався перемістити кожен файл у моїй /home/pi
папці до тимчасової папки та знову вийти з системи, але ssh-agent
все-таки породжувався.
Врешті-решт я також випустив останній кадр, який я мав у камері: я запустив find / -name 'ssh-agent'
як root, який тільки друкував /usr/bin/ssh-agent
, як виконуваний файл, тому я створив підроблений виконуваний файл, який в основному лише зареєстрував батьківську команду :
#! /bin/bash
ps -o args= $PPID > /home/pi/LOG
cat /proc/$PPID/cmdline >> /home/pi/LOG
Я перейменував справжній /usr/bin/ssh-agent
і замінив його фальшивим, встановивши потрібні дозволи / користувача / групу, запустив source ~/.bashrc
ще раз, після чого надрукував LOG
файл:
-bash
-bash
Немає жодної підказки про те, що відбувається.
Ще кілька деталей
Я додаю ще кілька деталей, я не знаю, вони можуть бути корисними чи ні, але ви знаєте ... краще безпечно, ніж вибачте.
Ось моя
.bashrc
.Я створив нового користувача на ім'я
dummy
за допомогоюuseradd -m dummy
, і вхід у нього не починаєтьсяssh-agent
(я відчуваю, що це може щось означати). Наdiff /home/pi/.bashrc /home/dummy/.bashrc
шоу в основному нічого (просто коментар , який я зробив), то ж саме дляdiff /home/pi/.profile /home/dummy/.profile
.Сокет агента створюється без проблем, хоча
SSH_AUTH_SOCK
він не встановлений:pi:~$ ls -lAh /tmp/ssh-vQRTAyj7DJry/ total 0 srw------- 1 pi pi 0 Jan 28 03:12 agent.1328
Не впевнений чому, але номер у імені файлу сокета завжди є одним безпосередньо перед PID
ssh-agent
процесу.Фрагмент від
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
Встановлені пакети
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]
При пошуку
ssh-agent -s
рекурсивно з використаннямgrep
в/etc
і/lib
дає ніяких результатів.У мене не встановлено робочого середовища, але в мене
/etc/X11
папка з деякими файлами конфігурації. Я спробував перейменувати папку на щось інше і перезавантажити на всякий випадок, але процес все-таки породжується, так що, мабуть , це не має великого відношення до цього.
Висновок
Тепер, щоб зробити це максимально просто, у мене є лише два питання:
- Де і як це
ssh-agent
породжується, хто видає команду? - Чому його не викликають належним чином, не встановлюючи необхідні змінні середовища, і, отже, не залишаючи процес висіти там на невизначений час?
~/.bashrc
тоді.