Политика компании требует безопасного хранения некоторых ключей 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, если у него нет способа получить доступ к указанному ключу, вместо запроса (бессмысленной) кодовой фразы?
Неполные решения:
IdentitiesOnly
- 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).