メモの日々


2009年03月25日(水) [長年日記]

[ruby] Net::SCP を使った

RubyでSCPを使ってファイルをアップロードするサンプルをメモ。Net::SCPライブラリを使う(追記:最新のドキュメントはgithub上にあるみたい)。

サンプルではパスワード認証を使っているが、公開鍵認証も使える。WindowsでPageantが動いているとパスフレーズを与えなくても動いた。

#!/usr/bin/ruby
# coding: utf-8

require "net/scp"
require "net/ssh"
require "net/ssh/prompt"

# Promptをincludeするとpromptメソッドが使えるようになる。
# ただし別途HighLineライブラリをインストールすべき。
# see: http://net-ssh.rubyforge.org/ssh/v2/api/classes/Net/SSH/PromptMethods.html
include Net::SSH::Prompt

unless ARGV.size == 2
  $stderr.puts "Usage: #{$0} <local file> <remote host>"
  exit 2
end

local_path = remote_path = ARGV[0]
remote_host = ARGV[1]

# ユーザ名とパスワードを入力してもらう。
# promptの第2引数にfalseを指定するとエコーバックしなくなる。
user_name = prompt("Please input user name:", true)
password = prompt("Please input #{user_name}'s password:", false)

puts "Uploading to #{user_name}@#{remote_host} ..."
Net::SCP.start(remote_host, user_name, {:password => password}) {|scp|
  scp.upload!(local_path, remote_path) {|ch, name, sent, total|
    print "\r  #{name}: #{sent}/#{total} (bytes)"
  }
}
puts

やること

  • 換金