Rubyのネットのssh:ゲートウェイを使用してpubkeyでで認証する方法
-
22-09-2019 - |
質問
私は、このようなOS、彼らしているランニングは、サービスがその上で実行するものを、いくつかの構成など、私は上のマシンを持っているとして、それらに関するいくつかの情報を収集するために、私が仕事で持っている複数のマシンでスクリプトを実行しようとしていますその理由は、それが持っている公開鍵のセットアップの他のマシンのいずれかにSSH-INGの前にIを記録します。そこから、私は自分のパスワードの入力を求められることなく他のすべてのマシンにsshをすることができます。
私は何をしたいというものから、これらのマシンのすべての上にログを自動化することですが、スクリプトは私のローカルマシン上で実行されています。だから、僕はルビーのssh-ゲートウェイについて学び、それをしようとしていますが、私は仕事に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')
それの作業を行いますが、パスワードがマシン間で同じではありませんので、それは、実行可能ではありません。
ん誰も私がこの作品を作ることができる方法を知っている?
感謝します。
解決
あなたがNATファイアウォールの背後に話しているマシンはありますか?ない場合は、ルビーの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
あなたはそれがSSHに殻から取り出すために、システムやバッククォートを使用するなど、単純なようだ、ということをやったしたら
system('ssh machine "ls -l"')