coffee into linux machine

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).