Прямий спосіб запуску ssh-агента та ssh-add при вході через SSH?


38

Я намагаюся, щоб наступні команди були автоматично виконані, коли я входив на свій сервер через ssh:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

Мій ключ ssh має парольну фразу, і я добре вводя його один раз за вхід.

Я спробував помістити це у свій .bashrc файл, проте я вважаю, що ssh-agent запускає новий сеанс bash. Коли я намагаюся увійти після того, як це у моєму .bashrc, він застрягає, і я повинен набрати "exit", щоб потім побачити підказку "enter passphrace to unlock key"

Будь-які інші пропозиції?

Сервер працює під управлінням Ubuntu LTS


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

@Zoredache Я хочу мати можливість робити git pullі таке на віддаленому сервері
Клацніть Upvote

Потім запустіть агент SSH на локальній машині та переадресуйте його.
Зоредаче

@Zoredache Спасибі, не знав, що це можливо. Однак я все-таки хотів би мати можливість робити ssh-add / ssh-агент із скрипту bash, навіть із моєї локальної машини. Біль доводиться виконувати ці команди вручну.
Клацніть Upvote

Відповіді:


52

Ви можете спробувати додати це:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Таким чином, команда ssh-agentне запускає нову оболонку, вона просто запускається у фоновому режимі і випилює команди оболонки, щоб встановити відповідні змінні середовища.

Як сказано в коментарі, можливо, ви зовсім не хочете запускати агент на віддаленому хості, а скоріше на вікні, з якого ви працюєте, і користуватися ним

ssh -A remote-host

щоб переслати послуги вашого локального агента ssh на віддалений хост.

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


Коли я замінити ssh-agent /bin/bashз ssh-agent -s, а потім я намагаюся зробити git pull, я ще попросив ключову фразу секретного ключа , щоб розблокувати його. Це насправді не те, що я хочу, я хочу лише вводити парольну фразу при виконанні ssh-add, а не повторювати її кожного разу, коли я виконую будь-які команди git. Якісь ідеї?
Клацніть Upvote

а запуск агента локально та використання ssh -A - це не варіант для вас? Проблема полягає в тому, що ви не можете "перезапустити" ssh-агент під час кожного з'єднання. Щоразу, коли ви запускаєте, він не знає "нічого", і коли ви додасте ключ, вам доведеться розшифрувати його ...
Tobi Oetiker

для вашого .ssh / config-файлу: автоматичний хост-контроль ControlMaster автоматично ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Tobi Oetiker

1
ой щойно зрозумів у баші, вам потрібен додатковий евал перед викликом ssh-агента .. оновлено мою відповідь вище
Tobi Oetiker

1
ви можете створити псевдонім
Tobi Oetiker

2

Одна з альтернатив - використовувати брелок Funtoo . Потім ви можете вставити цей одношаровий шар у вашій башті:

eval $(keychain --eval id_rsa)

Це робить те ж саме (запускає ssh агент тощо), при цьому також не запускає процес ssh-агент для кожної підпакеті. Натомість він шукає "вже запущені" екземпляри, якими ви володієте, і додає вас до них.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.