xlsログファイルだけを持つサーバーが1台あります。各ファイルは5〜15MBで、ファイルがいつでも追加されるという意味では動的です。今私はRubyを使って以下のプロセスを行う方法が必要です。あるサーバーから別のサーバーにファイルをコピーするにはどうすればよいですか?
- ログファイル以外のサーバーから別のサーバーにファイル名を送信してファイルをコピーします。
- サーバーパスワードを引数として渡す必要があります。
- すべてがバックグラウンドで発生します。これはRubyスクリプトからトリガされます。
xlsログファイルだけを持つサーバーが1台あります。各ファイルは5〜15MBで、ファイルがいつでも追加されるという意味では動的です。今私はRubyを使って以下のプロセスを行う方法が必要です。あるサーバーから別のサーバーにファイルをコピーするにはどうすればよいですか?
これは@theTinManにより示唆されるように、私はネットのssh &ネット-SCPの宝石を使用し、私は自分のファイルをコピーすることができました
を働いていた方法です。
require 'rubygems'
require 'net/ssh'
require 'net/scp'
Net::SSH.start("ip_address", "username",:password => "*********") do |session|
session.scp.download! "/home/logfiles/2-1-2012/login.xls", "/home/anil/Downloads"
end
とコピーにフォルダ全体
require 'rubygems'
require 'net/ssh'
require 'net/scp'
Net::SSH.start("ip_address", "username",:password => "*********") do |session|
session.scp.download!("/home/logfiles/2-1-2012", "/home/anil/Downloads", :recursive => true)
end
あなた自身のものを転がす代わりに、おそらくrsync
を使用してください。 ssh
をパブリック/プライベートキーアクセスで使用すると、パスワードを避けることができます。パスワードをまったく使用することは、おそらく悪い考えです。
Net::SCPとNet::SSHの宝石をご覧ください。第1の方法では、安全なコピーを使用してファイルを取り出すことができます.2番目の方法では、取り出せるファイルの名前を簡単に見つけることができます。 Net :: SSHでは、ssh.exec!
があなたの友人になります。 Net::SCPドキュメントから
:
ネット:: SCPは、Rubyプログラムがしっかりしてプログラム的に、リモートサーバから個々のファイルまたはディレクトリツリー全体を転送することができ、SCP(セキュアコピー)クライアントプロトコルを実装しています。これは、同じ接続上で並行して動作する複数の同時SCPコピーをサポートし、同期シリアルコピーもサポートします。 Net::SSHドキュメントから
# if you want to read from a URL voa SCP: require 'uri/open-scp' puts open("scp://[email protected]/path/to/file").read
:
ネット:: SCPはまた、オープン-URIをタイで、開くとリモートファイルを読むためにカーネル#openメソッドを使用できるように提供して
require 'net/ssh'
Net::SSH.start('host', 'user', :password => "password") do |ssh|
# capture all stderr and stdout output from a remote process
output = ssh.exec!("hostname")
上記のコードにend
を追加してブロックを閉じます。ブロック内には、output
には送信したコマンドの結果が含まれます。
ファイルを含むマシンからRuby経由でファイルを取得する代わりに、Rubyがファイルをホストしているマシンから直接転送を開始し、scp
経由で他のマシンに転送するようにすることもできます。
Net :: SCPとNet :: SSHを使用する代わりに、Net::SFTPを使用してすべてを1つのgemで管理できます。安全な接続もありますが、SFTPは利用できない可能性があります。 Net::SFTP::Operations::Dir
とNet::SFTP::Operations::Download
のクラスとドキュメントがあなたの友人になります。
その他のオプションには、標準のrsync
を@tadmanというシンプルなシェルで使用するオプションがあります。これを達成する方法は数多くあり、ホスティング環境では一般的な必要性があります。
、他のより良い方法?
rsync
、コマンドラインで。非常にスマートで、必要に応じてファイルのフォルダやデルタを移動できます。また、 "How to transfer files using ssh and Ruby"とそのリンクは "Ruby file upload ssh intro"です。
Rubyでの融資@ tadmanのrsync
の推奨事項は、「Cheapest rsync replacement (with Ruby)」です。
ボスは私の日を救った。 net/sshが動作しました。問題のコードを追加していただきありがとうございます。 –
彼があなたを助けた場合、あなたは質問を受け入れるべきです(投票ボタンの下に小さな目盛り)、それは良いSOのエチケットです。 –
@theTinManこれは1つのファイルで動作します。フォルダ全体をコピーする方法はありますか?上記の宝石で試しましたが、SCPは正常終了しました(Net :: SCP :: Error) –
それは一部の企業は、キーのアクセスを許可していないSCP
@session = Net::SSH.start(@ftpIp, @ftpUser, :password => @ftpPass)
@conn = Net::SFTP::Session.new(@session).connect!
def download_remote_folder(remote_path, local_path, use_ssh = @use_ssh)
@conn ||= connect
if (use_ssh)
@conn.download!(remote_path,local_path,:recursive => true)
else
@conn.get(remote_path, local_path)
end
end
def download_remote_file(remote_path, local_path, use_ssh = @use_ssh)
@conn ||= connect
if (use_ssh)
@conn.download!(remote_path,local_path)
else
@conn.get_file(remote_path, local_path)
end
end
なしに可能であるようです。パスワードを扱うのは苦痛ですが、セキュリティポリシーの一部でもあります。 –
一部の企業では、IT部門にトロールをスタッフが雇っています。パスワードは推測できます。鍵は盗まれなければならない。 – tadman
そうかもしれません。実際には、パスワードが必要な場所もあります。 –