3

状況は次のとおりです。

ServerA に SSH アクセスできる

ServerB には SFTP アクセスできますが、ServerA からのみアクセスできます

Ruby を使用して ServerA に SSH 接続し、次に ServerB から ServerA に SFTP ファイルを送信します。

Net::SSH のドキュメントを使用して ServerA に接続できます。

require 'net/ssh/gateway'

gateway = Net::SSH::Gateway.new('server_a', 'user')

gateway.ssh("server_a", "user") do |ssh|
  # how to SFTP into server_b here and run SFTP commands?
end

gateway.shutdown!

私が理解できないのは、ServerAのコンテキストからServerBにSFTPする方法です?

4

4 に答える 4

1

Assuming you have your private keys setup, run:

$ ssh-add

And write something like this:

require 'net/ssh'

# Set :forward_agent => true so that it will automatically authenticate with server_b
Net::SSH.start('server_a', 'user', :forward_agent => true) do |ssh|
  puts ssh.exec!("scp -r server_b:dir_i_want_to_copy dir_to_copy_to/")
end
于 2011-04-29T06:05:52.050 に答える
1

ゲートウェイ ライブラリを直接 net/sftp に拡張するとうまくいきました。


class Net::SSH::Gateway
  def sftp(host, user, options={}, &block)
    local_port = open(host, options[:port] || 22)
    begin
      Net::SFTP.start("127.0.0.1", user, options.merge(:port => local_port), &block)
    ensure
      close(local_port) if block || $!
    end
  end
end
于 2013-05-19T03:30:07.000 に答える
1

Net::SSH::Gateway クラスで scp メソッドを宣言できます。

同様の ssh メソッドをコピーしましたが、正常に動作します。

    class Gateway < Net::SSH::Gateway
      def scp(host, user, options={}, &block)
        local_port = open(host, options[:port] || 22)

        begin
          Net::SCP.start("127.0.0.1", user, options.merge(:port => local_port), &block)
        ensure
          close(local_port) if block || $!
        end
      end
    end
于 2013-04-23T16:56:24.720 に答える
0

コマンドラインから、サーバーにSSH接続した後にサーバーで実行するコマンドを指定できます

最初の Google の結果: http://bashcurescancer.com/run_remote_commands_with_ssh.html

したがって、Ruby コードで ssh コマンドをバッククォートで配置してから、SFTP コマンドを実行することを想像できます。

#!/usr/bin/env ruby

`ssh myserver 'sftp another-server'`

調べるもの

于 2011-04-29T05:04:40.200 に答える