7

SFTPを使用して多数のサーバーにログインし、特定のファイルをダウンロードして、問題が発生したときに問題をデバッグできるようにしたいと考えています。クライアントを使用することもできますが、すべてを合理化するためにプロセスの自動化を開始したいと考えていました。

私の最初の試みは次のようになります。

def download(files_to_download, destination_directory)
    Net::SFTP.start(@server, @username, :password => @password) do |sftp|
        files_to_download.each do |f|
            local_path = File.join(destination_directory, File.basename(f))
            sftp.download!(f, local_path)
        end
    end
end

これは機能しますが、パスワードが必要であることを意味します。理想的には、公開鍵認証を使用したいのですが、ドキュメントやオンラインでこれへの参照を確認できません-これは可能ですか?

チルカットは使いたくないです。

ありがとう

4

2 に答える 2

11

キー (または他の SSH オプション)を直接指定したい場合は、最初に Net::SSH 接続を開き、そこから SFTP 操作を行うことができます。

Net::SSH.start("localhost", "user", keys: ['keys/my_key']) do |ssh|
  ssh.sftp.upload!("/local/file.tgz", "/remote/file.tgz")
  ssh.exec! "cd /some/path && tar xf /remote/file.tgz && rm /remote/file.tgz"
end

これは Net::SCP でも機能します

Net::SSH.start('localhost', 'user', keys: ['keys/my_key'] ) do |ssh|
  ssh.scp.download("/local/file.txt", "/remote/file.txt")
end
于 2014-09-23T22:24:37.273 に答える
8

これは自動的に行われ、公開鍵をアップロードするだけですぐに使用できます。

公開鍵/秘密鍵を使用した接続

パスワードを指定した場合でも、公開/秘密鍵は、明示的なパスワード認証の前に常に試行されます。したがって、公開鍵/秘密鍵認証のみを使用する場合は、引数リストからパスワードを削除するだけです。セッション ハンドルを正常に取得できる場合は、キーが正しく設定されています。

于 2009-11-09T13:48:10.137 に答える