Pergunta

Estou tentando executar um script em várias máquinas que tenho no trabalho, para reunir algumas informações sobre elas, como qual o sistema operacional está executando, quais serviços executam neles, algumas configurações etc. Eu tenho uma máquina na qual registro Antes de ssh-ing para qualquer uma das outras máquinas, devido à configuração de chave pública que possui. A partir daí, posso SSH em todas as outras máquinas sem ser solicitado minha senha.

O que eu quero fazer é automatizar o login em todas essas máquinas dessa, mas o script está em execução na minha máquina local. Então, acabei de aprender sobre Ruby-Ssh-Gateway e estou tentando isso, mas não consigo fazer com que a autenticação do PubKey funcione.

Eu faço algo assim:

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

Mas eu recebo um Net::SSH::AuthenticationFailed exceção.

Se, em vez disso, eu forneço a senha, assim:

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

Funciona, mas isso não é viável, pois as senhas não são as mesmas entre máquinas.

Alguém sabe como posso fazer isso funcionar?

Obrigado.

Foi útil?

Solução

As máquinas com quem você está conversando por trás de um firewall nat? Caso contrário, você não precisa de rubi-ssh-gateway.

Você criou uma chave pública na caixa de origem, para o usuário que executa o programa e dada a chave para o usuário alvo em cada caixa de destino?

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

E para garantir que a chave esteja funcionando:

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

Depois de fazer isso, é tão simples quanto usar o sistema ou o backtick para gastar para SSH:

system('ssh machine "ls -l"')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top