Я пытаюсь автоматически выполнить следующие команды при входе на сервер через ssh:
ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa
У моего ключа SSH есть парольная фраза, и меня вполне устраивает вводить ее один раз при входе в систему.
Я попытался поместить это в свой файл .bashrc, однако я считаю, что ssh-agent запускает новую сессию bash. Когда я пытаюсь войти после того, как это было в моем .bashrc, он зависает, и мне приходится вводить «exit», чтобы увидеть приглашение «ввести пароль для разблокировки ключа»
Есть еще предложения?
Сервер работает под управлением Ubuntu LTS
решение1
Вы можете попробовать добавить это:
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
Таким образом, ssh-agent
не запускается новая оболочка, а просто запускается в фоновом режиме и выдает команды оболочки для установки соответствующих переменных среды.
Как сказано в комментарии, возможно, вы так и делаетенетхотите запустить агента не на удаленном хосте, а на том компьютере, с которого вы работаете, и используйте
ssh -A remote-host
для перенаправления служб вашего локального агента SSH на удаленный хост.
По соображениям безопасности следует использовать переадресацию агентов только с хостов, управляемых надежными людьми, но это лучше, чем удаленный запуск полного агента в любое время.
решение2
Другой альтернативой является добавление этого в ваш .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)
fi
Это запустит ssh-add, если не загружен хотя бы один ключ, и установит тайм-аут ключа в 1 день:
ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
echo Adding keys...
ssh-add -t 1d
fi
решение3
Альтернативой является использование FuntooБрелок. Затем вы можете вставить эту однострочную команду в свою оболочку bash:
eval $(keychain --eval id_rsa)
Это делает то же самое (запускает агента ssh и т. д.), но при этом не запускает процесс ssh-agent для каждой подоболочки. Вместо этого он ищет "уже запущенные" экземпляры, которыми вы владеете, и подключает вас к ним.
решение4
Также имейте в виду, что если у вас есть ssh connection keep-alive, вам нужно удалить существующие файлы подключений, прежде чем -A
изменения вступят в силу. Удалите все файлы подключений ssh в /tmp/[host]
.