Хто запускає мого ssh-агента, і чому він не буде належним чином припинятися?


9

Це проблема, з якою я стикаюсь давно, але кожного разу, коли намагаюся щось розібратися, я гублюсь, тому я зрозуміла, що краще запитати тут, де, можливо, мені може допомогти хтось більш досвідчений.

Фон

Мій 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папка з деякими файлами конфігурації. Я спробував перейменувати папку на щось інше і перезавантажити на всякий випадок, але процес все-таки породжується, так що, мабуть , це не має великого відношення до цього.


Висновок

Тепер, щоб зробити це максимально просто, у мене є лише два питання:

  1. Де і як це ssh-agentпороджується, хто видає команду?
  2. Чому його не викликають належним чином, не встановлюючи необхідні змінні середовища, і, отже, не залишаючи процес висіти там на невизначений час?

Мені цікаво, що ти маєш у своєму ~/.bashrcтоді.
ilkkachu

Відповіді:


1

Я знаю пару можливих причин:

  • якщо ви використовуєте libpam-ssh, він може автоматично запустити SSH-агент для вас, як частину запуску сеансу, і навіть автоматично завантажувати ваші ключі, якщо у них немає парольної фрази, або їх парольна фраза така, як ваш пароль для входу.

  • якщо ви використовуєте gpg-agent, він необов'язково може виконувати також завдання ssh-agent. Його вимкнення обробляється по-різному, тому буде лише SSH_AUTH_SOCKзмінна середовище, а не theSSH_AGENT_PID

  • якщо на вашій робочій станції працює SSH-агент (наприклад, PageT) PuTTY і здійснює з'єднання SSH з увімкненою переадресацією агента (а пульт sshdдозволяє це), на віддаленому хості ви знову побачите лише SSH_AUTH_SOCKбез SSH_AGENT_PID... оскільки сокет агента переходить до sshdтунелів, які він повертає до агента SSH місцевої робочої станції.


1
Дякую за пропозиції, але, на жаль, жоден із цих варіантів не стосується мене. У мене немає libpam-ssh; і те, SSH_AGENT_PIDі інше SSH_AUTH_SOCKне встановлено (розетка, звичайно, присутня в будь-якому випадку); Я не використовую gpg-agentі не включаю переадресацію агента на PuTTY. Я справді загублений: \
Марко Бонеллі,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.