Навіщо оцінювати вихід ssh-агента?


66

Для того, щоб запустити, ssh-agentя повинен використовувати

eval $(ssh-agent)

Чому я маю на evalвиході ssh-agent?

Чому він не розроблений так, що я можу його просто запустити?


Примітка. Повернення (") видалено, коли вони застаріли. Докладніше про це можна, наприклад, прочитати тут .


Хто каже, що ви повинні використовувати eval? Що це диктує? Трохи більше контексту допоможе.
0xШепдог


9
@ 0xSheepdog на manсторінку, для початку ...
jasonwryan

Схоже, випадки використання задокументовані на довільній сторінці. Щодо "чому він призначений певним чином" ... знизайте плечима .
0xШепдог

5
Знову повторюю, що це не так ssh-agent"розроблено таким чином", це unix / linux, тому що ssh-agentпрацює в дочірньому процесі оболонки. Дочірні процеси не можуть змінювати батьківські процеси. Але функція може: тому що вона працює в поточному процесі. Таким чином , ви могли б написати функцію: do_set_ssh_agent() { eval SSH-агент , ; }і що можна було б працювати просто як: $ do_set_ssh_agent. Але "програми" не (як правило) встановлюються як "функції" в linux / unix; натомість програми встановлюються у вигляді файлів, які, як було сказано, запускаються в дочірньому процесі. (Сценарії пошуку є винятком, але ssh-агент є двійковим.)
michael

Відповіді:


79

ssh-agent виводить змінні середовища, які потрібно мати для підключення до нього:

shadur@proteus:~$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-492P67qzMeGA/agent.7948; export SSH_AUTH_SOCK;
SSH_AGENT_PID=7949; export SSH_AGENT_PID;
echo Agent pid 7949;
shadur@proteus:~$ 

Зателефонувавши, evalви негайно завантажуєте ці змінні у ваше оточення.

Щодо того, чому ssh-agentне можна зробити це самостійно ... Зауважте, вибір слова. Не "не", " не можу ". У Unix процес може змінювати лише власні змінні середовища та передавати їх дітям. Він не може змінювати середовище свого батьківського процесу, оскільки система цього не дозволяє. Це досить базовий дизайн безпеки.

Ви можете обійти eval, використовуючи, ssh-agent utilityде utilityзнаходиться ваша оболонка для входу, менеджер вікон або будь-яка інша річ, щоб встановити змінні середовища SSH. Про це також йдеться в посібнику.


Дякую, це чітко пояснює, що відбувається, і я це розумію, але чому він розроблений саме так, а не розроблений так, що він працює автоматично додає змінні в середовище? Чи додає це якусь гнучкість ???
jx12345

4
@ jx12345 Ви можете обійти eval, використовуючи, ssh-agent utilityде utilityзнаходиться ваша оболонка для входу, ваш менеджер вікон або будь-яка інша річ, щоб встановити змінні середовища SSH. Про це також йдеться в посібнику. Жодна зовнішня утиліта не може встановлювати змінні в середовищі виклику.
Kusalananda

@kusalananda Правильно; сміливо додайте це як редагування. Я зараз лягаю спати або я б це зробив сам.
Шадур

5
@ jx12345 Тому що він може додавати змінні до власного середовища, але він не може додавати змінні до середовища вашої оболонки, оскільки це не ваша оболонка.
користувач253751

3
@ jx12345 Для уточнення: Якщо я можу додати або змінити env-змінні до свого батьківського процесу, я міг би вплинути на батьківського батька і так далі до PID 1. Це називається "ескалація привілеїв", і це дійсно погано з безпеки точки зору.
Шадур
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.