Це проблема, з якою я стикаюсь давно, але кожного разу, коли намагаюся щось розібратися, я гублюсь, тому я зрозуміла, що краще запитати тут, де, можливо, мені може допомогти хтось більш досвідчений.
Фон
Мій Raspberry Pi працює Raspbian Jessie, і я часто використовую SSH, щоб увійти в нього і виконувати команди віддалено. Під час моїх перших сеансів SSH я помітив, що ssh-agentпроцес з'являється на RPi кожного разу, коли я входив у систему, але ніколи не вбивався під час exiting: вхід і вихід кілька разів спричиняли купу спалаху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тоді.