6

ここで小さな問題があります。SCPとRubyを使用してファイルを秘密鍵を使用してサーバーにアップロードしようとしています。コードは次のようになります。

  def transfer_file(source_file, destination_file)
     $log.info("ScpDP: Key=#{@key}")
     Net::SCP.start(@host, @userName, :keys => @key ) do |scp|
       scp.upload!(source_file,@folder + destination_file, :ssh => @key)
     end
  end

ただし、秘密鍵は日常的に使用しているため、問題があり、秘密鍵には問題があり、次のログエラーが発生します。

I, [2010-08-24T11:21:27.247847 #14310]  INFO -- : ScpDP: Key=/home/myself/.ssh/id_rsa
I, [2010-08-24T11:21:27.397971 #14310]  INFO -- : SCP did not finish successfully (1)   (Net::SCP::Error)
/usr/lib/ruby/gems/1.8/gems/net-scp-1.0.2/lib/net/scp.rb:351:in `start_command'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/channel.rb:585:in `call'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/channel.rb:585:in `do_close'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:575:in `channel_close'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:455:in `send'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:455:in `dispatch_incoming_packets'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:212:in `preprocess'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:196:in `process'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:160:in `loop'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:160:in `loop_forever'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:160:in `loop'
/usr/lib/ruby/gems/1.8/gems/net-ssh-2.0.11/lib/net/ssh/connection/session.rb:109:in `close'
/usr/lib/ruby/gems/1.8/gems/net-scp-1.0.2/lib/net/scp.rb:204:in `start'
/home/myself/work/server.rb:458:in `transfer_file'

ここで何が悪いのか指摘していただけますか?この段階では、Rubyの経験はかなり限られています。

4

2 に答える 2

2

これが可能になったようです。net-scpのドキュメントによると、Net::SSHセッションを使用してコマンドを実行できscpます。Ruby内で秘密鍵を使用した認証の使用に関するこの回答と組み合わせると、次のようになります。

require 'net/ssh'
require 'net/scp'

ssh_private_keys = ['ssh-rsa AAAAB3NzaC1yc2EAAA', 'ssh-rsa AAAAB3NzaC1yc2EAAA']
Net::SSH.start(hostname, username, key_data: ssh_private_keys, keys_only: true) do |ssh|
  ssh.scp.upload!(source_file, destination_file)
end
于 2015-12-06T03:49:19.997 に答える
1

このドキュメントをざっと見てみると、合格しているため、sshキーオプションを受け入れないことがわかります。しかし、あなたが正しく、私がその部分で間違っていると仮定すると、

transfer_fileに渡す値と、@ folderに格納されている値を確認せずに推測することしかできませんが、両方がファイルオブジェクトであると仮定すると、オブジェクトを連結することはできません。パス属性を取得する必要があります。これらの2つの変数の値をログに記録して、パスを取得していることを確認することをお勧めします。また、rubyメソッドを使用して文字列引数を連結する方が幸運かもしれません。"#{}"ここでも推測しますが、

path = "#{@folder.path}/#{destination_file.path}" #=> "my_folder/destination_folder

scp.upload!(source_file,path, :ssh => @key)

于 2010-08-24T16:51:15.097 に答える