Я использую libssh2
, чтобы сделать сетевую программу более безопасной.
Я бы хотел, чтобы моя программа аутентифицировалась максимально похоже на ssh(1) клиента OpenSSH. Клиент OpenSSH будет запрашивать парольные фразы только для ключей, которые фактически приняты сервером.
Насколько я понял из этой ссылки, клиент ssh отправляет запрос использовать открытый ключ, и если это будет принято, он может разблокировать закрытый ключ с помощью парольной фразы.
libssh2 предоставляет функцию libssh2_userauth_publickey_fromfile
, которая принимает имена файлов закрытого и открытого ключей и парольную фразу. Использование этой функции очень прямолинейно, но это означает, что я должен получить парольную фразу для закрытых ключей, даже если открытый ключ не был бы принят сервером в первую очередь. Это явно проблема для пользователей, у которых много разных ключей (в настоящее время моя программа перебирает файлы ключей в каталоге ~/.ssh).
Я пробовал читать справочные страницы для libssh2
функций, и большинство из них кажутся мне слишком краткими, чтобы их можно было понять без более подробного знания протокола ssh. Фактически, некоторые из них еще даже не написаны.
Может ли кто-нибудь сказать мне, как запрашивать парольные фразы только для ключей, которые фактически принимаются ssh-сервером с использованием libssh2
?