ssh висит после перезагрузки: агент gcr ждёт пароль от ключа
После перезагрузки ssh к серверу то просто висел, то падал с ошибкой:
sign_and_send_pubkey: signing failed for ED25519 "/home/user/.ssh/server_key" from agent: communication with agent failed
Ключ на месте, на сервере ничего не менялось, а до перезагрузки всё работало.
Кто здесь агент
$ echo $SSH_AUTH_SOCK
/run/user/1000/gcr/ssh
Ключами SSH заведует gcr-ssh-agent — родственник связки ключей GNOME, который запускается и в KDE. Он сам подхватывает ключи из ~/.ssh, и ssh-add -l показывает их сразу после входа. Но ключ, защищённый паролем, агент расшифровывает только при первой попытке подписи — и спрашивает пароль в своём окне.
Если окно спряталось за другими или вы его не заметили, ssh ждёт ответа. Не дождался — получаете «communication with agent failed». Опция -o BatchMode=yes здесь не спасает: ждёт не сам ssh, а агент.
Что делать
- Найти окно с запросом пароля и ответить. Если в нём есть галочка автоматической разблокировки при входе, пароль сохранится в связке ключей, и после следующей перезагрузки вопроса не будет.
- Ввести пароль в терминале, заранее:
ssh-add ~/.ssh/server_key - Обойти агент для одной команды — тогда
sshспросит пароль сам:SSH_AUTH_SOCK= ssh -i ~/.ssh/server_key user@server - Для скриптов, которые работают без вас, — отдельный ключ без пароля, которому на сервере разрешена только нужная команда (
command="…"вauthorized_keys).