Как напрямую запустить ssh-agent и ssh-add при входе в систему через SSH?

Как напрямую запустить ssh-agent и ssh-add при входе в систему через SSH?

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

Связанный контент