Question

Je suis en train d'exécuter un script dans plusieurs machines que j'ai au travail, de recueillir des informations à leur sujet, comme celle qui OS ils sont en cours d'exécution, quels services leur sont destinés, certaines configurations, etc. J'ai une machine que je me connecte avant ssh-ment à l'une des autres machines, en raison de la configuration clé publique qu'il a. A partir de là, je peux ssh dans toutes les autres machines sans être demandé mon mot de passe.

Ce que je veux faire est d'automatiser l'enregistrement sur toutes ces machines de celui-là, mais le script est en cours d'exécution sur ma machine locale. Donc, je viens d'apprendre au sujet de-ssh-passerelle rubis et essaie, mais je ne peux pas sembler obtenir l'authentification pubkey fonctionne.

Je fais quelque chose comme ceci:

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

Mais je reçois une exception Net::SSH::AuthenticationFailed.

Si, au contraire, je donne le mot de passe, comme suit:

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

il fonctionne, mais ce n'est pas viable, puisque les mots de passe ne sont pas les mêmes machines à travers.

Est-ce que quelqu'un sait comment je peux faire ce travail?

Merci.

Était-ce utile?

La solution

Les machines dont vous parlez à un pare-feu NAT? Sinon, vous n'avez pas besoin ssh-passerelle rubis.

Avez-vous créé une clé publique sur la boîte d'origine, pour l'utilisateur qui exécute le programme, et étant donné que la clé de l'utilisateur cible sur chaque boîte cible?

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

et assurez-vous que la clé fonctionne:

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

Une fois que vous avez fait cela, il est aussi simple que l'utilisation du système ou backtick à débourser à ssh:

system('ssh machine "ls -l"')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top