Ruby Net::SSH.start() терпит неудачу из-за проблем с аутентификацией, но используемый ключ работает нормально при ssh-подключении за пределами Ruby

Я пытаюсь подключиться к машине по ssh в рамках теста Ruby и выполнить команду на машине. Для этого я использую библиотеку Net:SSH от Ruby. Простая версия скрипта, который я использую, выглядит так:

Это не работает при:

Когда я запускаю ssh root@$IP в командной строке, это работает успешно, и я могу подключиться к машине без проблем. Кроме того, когда я использую исполняющий модуль командной строки Ruby, заключая команду в обратные кавычки, это тоже работает. Это навело меня на мысль, что проблема в конфигурации моего экземпляра Net:SSH.

Сначала я проверил файл /var/log/auth.log на своей машине, и в нем была следующая строка: 19 авг 15:50:44 a$IP sshd[3385268]: userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth] Кроме того, моя локальная конфигурация ssh содержит следующее:

и вход в систему не удается, когда эта строка удаляется. Из этого следует, что мне нужно использовать ssh-dss для ключа. Я попробовал переключить конфигурацию Net:SSH.start на следующее:

но это не удалось с той же ошибкой аутентификации, что и выше.

require 'net/ssh'

Net::SSH.start($IP, $USER, verbose: :debug) do |ssh|
  puts ssh.exec!("hostname")
end
ruby/gems/3.2.0/gems/net-ssh-7.2.3/lib/net/ssh.rb:275:in `start': Authentication failed for user root@$IP (Net::SSH::AuthenticationFailed)
Host *
    HostKeyAlgorithms +ssh-dss
Net::SSH.start($IP, $USER, host_key: ["ssh-dss"], append_all_supported_algorithms: true, non_interactive: true, verbose: :debug)
Ян
Вопрос задан29 января 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.