2

稼働中の複数のマシンでスクリプトを実行して、実行中のOS、実行中のサービス、構成など、それらに関する情報を収集しようとしています。ログに記録するマシンがあります。公開鍵が設定されているため、他のマシンにSSH接続する前に。そこから、パスワードを要求されることなく、他のすべてのマシンにSSH接続できます。

私がやりたいのは、そのマシンからこれらすべてのマシンへのログオンを自動化することですが、スクリプトは私のローカルマシンで実行されています。だから私はruby-ssh-gatewayについて学び、それを試していますが、pubkey認証を機能させることができないようです。

私はこのようなことをします:

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')

それは機能しますが、パスワードはマシン間で同じではないため、それは実行可能ではありません。

誰かが私がこれを機能させる方法を知っていますか?

ありがとう。

4

1 に答える 1

2

話しているマシンは NAT ファイアウォールの背後にありますか? そうでない場合は、ruby-ssh-gateway は必要ありません。

プログラムを実行するユーザーのためにオリジンボックスに公開鍵を作成し、その鍵を各ターゲットボックスのターゲットユーザーに与えましたか?

$ 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"')
于 2010-01-04T20:17:45.823 に答える