Я пытаюсь автоматически выполнить следующие команды, когда я вхожу на свой сервер через 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