Рубиновый сетевой-ssh:Как пройти аутентификацию с помощью открытого ключа с помощью шлюза

StackOverflow https://stackoverflow.com/questions/1999234

Вопрос

Я пытаюсь запустить сценарий на нескольких машинах, которые у меня на работе, чтобы собрать некоторую информацию о них, например, какую ОС они используют, какие службы на них работают, какие конфигурации и т. д.У меня есть машина, на которой я вхожу в систему перед подключением по SSH к любой другой машине из-за установленного на ней открытого ключа.Оттуда я могу подключиться ко всем другим машинам по SSH, не требуя ввода пароля.

Я хочу автоматизировать вход на все эти машины с этой машины, но сценарий выполняется на моей локальной машине.Итак, я только что узнал о Ruby-ssh-gateway и пытаюсь это сделать, но, похоже, не могу заставить работать аутентификацию по открытому ключу.

Я делаю что-то вроде этого:

gateway = Net::SSH::Gateway.new('gatewaymachine', 'username', :password => 'password')
all_machines.each do |machine|
  gateway.ssh(machine, 'username') do |ssh|
    uname = ssh.exec!('uname -a')
    puts "machine: #{machine}; OS: #{uname}"
  end
end

Но я получаю Net::SSH::AuthenticationFailed исключение.

Если вместо этого я укажу пароль, например:

gateway.ssh(machine, 'username', :password => 'password')

это работает, но это нецелесообразно, поскольку пароли на разных машинах разные.

Кто-нибудь знает, как я могу заставить эту работу работать?

Спасибо.

Это было полезно?

Решение

Находятся ли машины, с которыми вы разговариваете, за брандмауэром NAT?Если нет, вам не нужен Ruby-ssh-шлюз.

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

$ ssh-keygen -t dsa    # Only do this once
$ ssh-copy-id -i ~/.ssh/id_dsa.pub user@machine
(enter the password)

и убедиться, что ключ работает:

$ ssh user@machine      # should not ask for a password

Как только вы это сделаете, это будет так же просто, как использовать system или backtick для вызова ssh:

system('ssh machine "ls -l"')
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top