Получить отпечаток хоста без аутентификации?

Можно ли каким-либо образом получить отпечатки пальцев удаленного хоста, не передавая учетные данные или другую аутентификацию на устройство?

Есть пример ssh.net, где показано, как проверить отпечаток хоста, но для этого требуются учетные данные. Там нет конструктора для SshClient что не требует имени пользователя и даже ConnectionInfo класс также требует одного, так что я не знаю, как лучше поступить.

Документации не так много, хотя я нашел репозиторий NuDoq, но этот класс довольно большой, и примеры ограничены, поэтому любая точка в правильном направлении приветствуется!

Это пример, который они дали, но он требует аутентификации:

byte[] expectedFingerPrint = new byte[] {
                                            0x66, 0x31, 0xaf, 0x00, 0x54, 0xb9, 0x87, 0x31,
                                            0xff, 0x58, 0x1c, 0x31, 0xb1, 0xa2, 0x4c, 0x6b
                                        };

using (var client = new SshClient("sftp.foo.com", "guest", "pwd"))
{
    client.HostKeyReceived += (sender, e) =>
        {
            if (expectedFingerPrint.Length == e.FingerPrint.Length)
            {
                for (var i = 0; i < expectedFingerPrint.Length; i++)
                {
                    if (expectedFingerPrint[i] != e.FingerPrint[i])
                    {
                        e.CanTrust = false;
                        break;
                    }
                }
            }
            else
            {
                e.CanTrust = false;
            }
        };
    client.Connect();
}

1 ответ

Решение

HostKeyReceived происходит до любой аутентификации. Ключ хоста должен быть проверен перед аутентификацией, чтобы клиент случайно не отправил учетные данные на вредоносный сервер или MITM.

Таким образом, полномочия не имеют значения. Просто предоставьте фиктивные учетные данные в конструкторе, проверьте отпечаток в вашем обработчике событий и прервите соединение.

Другие вопросы по тегам