Я пытаюсь подключиться к машине по ssh в рамках теста Ruby и запустить на машине команду. Для этого я использую библиотеку Ruby Net:SSH. Простая версия сценария, который я использую, выглядит так:
Это не работает:
Когда я запускаю ssh root@$IP
в своей команде линия, она работает успешно, и я могу без проблем подключиться к машине. Кроме того, когда я использую исполнитель командной строки Ruby, заключая команду в обратные кавычки, это тоже работает. Это заставило меня подумать, что это проблема конфигурации моего экземпляра Net:SSH.
Сначала я проверил файл /var/log/auth.log на своем компьютере, и в нем была следующая строка:
19 августа 15:50:44 a$IP sshd[3385268]: userauth_pubkey: тип ключа ssh-rsa отсутствует в 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)