Назад | Перейти на главную страницу

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

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

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

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

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

Есть другие предложения?

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

Вы можете попробовать добавить это:

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

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

Как сказано в комментарии, возможно, вы не хотите запустить агент вообще на удаленном хосте, а скорее на компьютере, с которого вы работаете, и используйте

ssh -A remote-host

для перенаправления служб вашего локального ssh-агента на удаленный хост.

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

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

eval $(keychain --eval id_rsa)

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

Другой вариант - добавить это в ваш .bashrc. Это имеет то же преимущество, что и ответ Эрика (обеспечение единственного экземпляра), но не требует дополнительного пакета.

# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
    echo Starting SSH Agent
    eval $(ssh-agent -s)
    ssh-add ~/.ssh/id_rsa
fi