Назад | Перейти на главную страницу

заставить ssh использовать агент без возврата к прямому доступу к IdentityFile

Политика компании требует безопасного хранения некоторых ключей ssh, например на выделенном USB-устройстве. Использование ключей, не хранящихся на хост-машине, работает безупречно при использовании gnupg с enable-ssh-support, даже если используется несколько ключей:

Host example.com
    HostName ssh.example.com
    IdentityFile ~/.ssh/smartcard.pub
Host example.net
    HostName git.example.net
    IdentityFile ~/.ssh/another-smartcard.pub
Host example.org
    HostName sftp.example.org
    IdentityFile ~/.ssh/id_rsa.pub

IdentitiesOnly yes
PasswordAuthentication no
PubkeyAuthentication yes

Однако, когда оборудование отключено, gpg удаляет ключ из агента, и последующие вызовы ssh приводят к:

Enter passphrase for key '/home/user/.ssh/smartcard.pub':

Это кажется странным, поскольку и ssh, и ssh-agent должны знать, что этот файл содержит только открытый ключ. Есть ли хороший способ сделать подробный сбой ssh, если у него нет способа получить доступ к указанному ключу, вместо запроса (бессмысленной) кодовой фразы?

Неполные решения:

  1. удалять IdentitiesOnly - ssh попытается все используемые ключи как и ожидалось, но приводит к проблемам с серверами, ограничивающими попытки аутентификации за сеанс
  2. обернуть ssh каким-либо образом alias ssh='grep ^4096 <(ssh-add -l)' && ssh' - работает, но вызовет головную боль, если кто-то когда-нибудь захочет узнать, почему его настройка ssh не работает

Используйте OpenSSH 7.9 или новее, он будет как минимум печатать некоторые ошибка:

$ ssh example.com
Load key "/home/user/.ssh/smartcard.pub": invalid format
user@example.com: Permission denied (publickey).