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

38

Я пытаюсь автоматически выполнить следующие команды при входе на сервер через ssh:

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

У моего ключа ssh есть фраза-пароль, и я могу ввести ее один раз для входа в систему.

Я попытался поместить это в мой файл .bashrc, однако я считаю, что ssh-agent запускает новый сеанс bash. Когда я пытаюсь войти в систему после этого в моем .bashrc, он застревает, и мне нужно набрать «exit», чтобы увидеть приглашение «ввести пароль для разблокировки».

Любые другие предложения?

Сервер работает под управлением Ubuntu LTS

Нажмите Upvote
источник
Почему ключевой агент на сервере? Он должен быть на вашем локальном клиенте , с которого вы подключаетесь.
Зоредаче
@ Zoredache Я хочу иметь возможность делать это git pullи на удаленном сервере
нажмите Upvote
Затем запустите агент SSH на локальном компьютере и перешлите агент.
Зоредаче
@Zoredache Спасибо, не знал, что это возможно. Однако я все еще хотел бы иметь возможность делать ssh-add / ssh-agent из скрипта 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-agent при каждом подключении. Каждый раз, когда вы запускаете его, он ничего не знает, и когда вы ssh-добавляете ключ, вам придется расшифровать его ...
Тоби Отикер
для вашего файла .ssh / config: Хост удаленного хоста ControlMaster auto ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Тоби Отикер
1
упс, только что понял в bash, вам нужен дополнительный eval перед вызовом ssh-agent .. обновил мой ответ выше
Tobi Oetiker
1
Вы могли бы создать псевдоним
Тоби Oetiker
2

Одним из вариантов является использование Funtoo в брелок . Затем вы можете вставить эту строку в оболочку bash:

eval $(keychain --eval id_rsa)

Это делает то же самое (запускает агент ssh и т. Д.), Но также не запускает процесс ssh-agent для каждой подоболочки. Вместо этого он ищет «уже запущенные» экземпляры, которыми вы владеете, и присоединяет вас к ним.

Эрик Аронесты
источник