rascal-pendular, bear-den, and no entry

前へ | 目次 | 索引 | 次へ

Chapter 5: PSCP で安全にファイルを転送する

PSCP, PuTTY セキュアコピークライアントは、SSH 接続を使ってコンピュータ間で安全にファイル転送するためのツールです。

もし SSH-2 サーバがあるならば、対話型の操作は PSFTP (chapter 6 参照) がよいでしょう。ただし PSFTP は SSH-1 サーバでは通常動作しません。

5.1 PSCP を開始する

PSCP はコマンドラインアプリケーションです。つまりアイコンをダブルクリックしても動作しませんので、代わりにコンソールウインドウを開きます。 Windows ME 以前では“MS-DOS プロンプト”と呼ばれていました。 Windows NT, XP 以降では“コマンドプロンプト”と呼ばれています。 スタートメニューのプログラムから選択できます。

PSCP を開始するには PATH か現在のディレクトリにそれが配置されていなくてはなりません。 PSCP のあるディレクトリを PATH 環境変数に入れるには、コンソールウインドウに以下をタイプします:

set "PATH=C:\path\to\putty\directory;%PATH%"

これはそのコンソールウインドウを閉じるまで有効です。 PATH をより長く有効にするには、Windows NT, XP 以降ではシステムコントロールパネルの環境変数タブを使います。 Windows ME 以前では上記のような set コマンドを AUTOEXEC.BAT に記述します。

訳注: 普段エクスプローラを使っている場合はコントロールパネルで変更するよりも環境変数を設定してからコマンドプロンプトを起動する (start /b cmd) バッチファイルを作る方が手軽でポータブルです。もちろん、現在のディレクトリがどこであれ、フルパスを指定すれば直接起動できます。

5.2 PSCP の使い方

コンソールウインドウを起動したら、pscp -h とタイプすると使い方のメッセージが表示されます。 PSCP のバージョンと使い方の簡単な概要を表示します:

C:\>pscp -h
PuTTY Secure Copy client
Release 0.83
使い方: pscp [オプション] [ユーザ名@]接続先:コピー元 保存先
        pscp [オプション] コピー元 [コピー元...] [ユーザ名@]接続先:保存先
        pscp [オプション] -ls [ユーザ名@]接続先:ファイルパターン
オプション:
  -V        バージョン情報を表示して終了する
  -pgpfp    PGP 鍵の指紋を表示して終了する
  -p        ファイルの属性を維持する
  -q        無口(quiet), 状態を表示しない
  -r        ディレクトリを再帰的にコピーする
  -v        冗長(verbose)にメッセージを表示する
  -load sessname  保存済みセッションから読み込む
  -P port   指定したポートに接続する
  -l user   指定したユーザ名で接続する
  -pwfile file   ファイルに書かれたパスワードでログイン
  -1 -2     指定 SSH プロトコルバージョンの使用を強制する
  -ssh -ssh-connection
            特定の SSH プロトコルの使用を強制する
  -4 -6     IPv4 / IPv6 の使用を強制する
  -C        圧縮を有効にする
  -i key    ユーザ認証に使用する秘密鍵
  -noagent  Pageant を使用しない
  -agent    Pageant を使用する
  -no-trivial-auth
            認証が瑣末に完了した場合に切断する
  -hostkey aa:bb:cc:...
            ホスト鍵を手動で指定する(繰り返し可)
  -batch    対話型プロンプト無効
  -no-sanitise-stderr  制御文字を標準エラー出力から除去しない
  -proxycmd command
            'command' をローカルプロキシとして使用
  -unsafe   サーバサイドのワイルドカードを許可(危険)
  -sftp     SFTP プロトコルの使用を強制する (訳注:推奨)
  -scp      SCP プロトコルの使用を強制する
  -sshlog file
  -sshrawlog file
            プロトコルの通信の詳細をファイルに記録する
  -logoverwrite
  -logappend
            同名のログファイルが存在した場合の処理を指定する

[Custom]

  -limit num
            個々のファイルのアップロード速度を指定した kbps 値に制限する

(Unix の scp コマンドに慣れている場合、PSCP のインターフェイスはとても似ています。)

5.2.1 基本的な使い方

ファイルをサーバから受信するには:

pscp [オプション] [ユーザ名@]接続先:コピー元 保存先

サーバ example.com のユーザ fred として接続し ファイル /etc/hosts をローカルの c:\temp\example-hosts.txt に保存するには次のようになります:

pscp fred@example.com:/etc/hosts c:\temp\example-hosts.txt

ファイルをサーバに保存するには:

pscp [オプション] コピー元 [コピー元...] [ユーザ名@]接続先:保存先

ローカルのファイル c:\documents\foo.txt をサーバ example.com にユーザ fred として接続してリモートの /tmp/foo に保存するには次のようになります:

pscp c:\documents\foo.txt fred@example.com:/tmp/foo

ワイルドカードを使うと複数のファイルをどちらかに転送できます:

pscp c:\documents\*.doc fred@example.com:docfiles
pscp fred@example.com:source/*.c c:\source

しかし、二番目の例 (ワイルドカードをリモートファイルの複数指定に使う方法) は次のような趣旨の警告が表示されます: “警告: ファイル“*.c”の要求に対してリモートホストが“terminal.c”を保存するように応答しました。もし指定がワイルドカードならば SSH-2 にアップグレードするか “-unsafe” オプションを使ってください。ファイルの名前変更は禁止されています。”

これは古い形式のSCP プロトコルの基礎的な危険性によるものです。クライアントはワイルドカードの名称 (*.c) をサーバに送り、サーバはワイルドカードに一致するファイル名一覧を返します。しかしサーバが異なったパターンを返してあなたの他のファイルを上書きするのを防止できません。たとえばあなたが *.c を要求したとき、サーバが AUTOEXEC.BAT を返してウイルスをインストールするかもしれません。クライアントは受け取ったファイル名がパターンに一致するかどうか確実には検証できません。

PSCP はより新しい SFTP プロトコル (SSH-2 の一部) を可能ならば使用します。こちらはセキュリティ上の欠点はありません。 SFTP に対応した SSH-2 サーバに接続するならば、この警告は表示されません。 (-sftp オプションで SCP プロトコルを使わないように強制できます。 Section 5.2.2.6 を参照してください。)

訳注:通常 SSH-1 を使うことはなく、また正しく設定された SSH-2 サーバでは SFTP が利用できないこともないため、常に -sftp オプションの利用を推奨します。

どうしてもサーバ側のワイルドカードを SSH-1 で使いたいならば、-unsafe オプションを使います:

pscp -unsafe fred@example.com:source/*.c c:\source

これで警告メッセージを抑止してファイル転送が実行されます。しかしこのオプションを使った場合、サーバが保存先ディレクトリにどんなファイルでも書き込めることに留意してください。なのでこのオプションはサーバ管理者が悪意を持たないこと (そしてサーバマシンを悪意のある人にクラックされないこと) を信用できる場合だけに使うべきです。別の方法として、そのようなダウンロードを新しく作った空のディレクトリに行います。 (安全でない“unsafe”モードでも、PSCP は依然としてサーバが“..”を含むパスでローカルディレクトリの外に出ようとすることは防ぎます。)

5.2.1.1 ユーザ名

リモートサーバのログイン名です。省略すると、ホスト名が PuTTY の保存済みセッションの場合は、その設定で指定したユーザ名を使います。そうでなければ PSCP はローカルの Windows のユーザ名を使おうとします。

5.2.1.2 接続先

リモートサーバの名前、もしくは PuTTY の保存済みセッションの名前です。後者の場合、セッション設定からホスト名、ポート番号、暗号化種別とユーザ名を使います。

5.2.1.3 コピー元

コピーするファイル (複数可能) です。 ワイルドカードが使用できます。ワイルドカードの文法は適用するシステムによって異なります。 Windows から Unix の場合、Windows の書式 (例えば *.*) を使いますが、Unix から Windows の場合、Unix シェルの書式 (例えば *) を使います。

コピー元がリモートサーバでフルパス名 (Unix では / (スラッシュ) で始まるパス名) を指定しないと、コピー元として指定したものはリモートサーバのホームディレクトリからの相対パスとして解釈されます。

5.2.1.4 保存先

ファイルを保存する名前か配置するディレクトリです。リモートサーバからローカルに保存する場合、単に現在のディレクトリに置きたい場合があります。そのためには . を保存先として選択します。例えば:

pscp fred@example.com:/home/tom/.emacs .

でリモートサーバの /home/tom/.emacs を現在のディレクトリに保存します。

コピー元パラメータと同様に、保存先がリモートサーバでフルパス名でない場合、リモートサーバのホームディレクトリからの相対パスとして解釈されます。

5.2.2 オプション

PSCP は PuTTY ツールのサポートする一般的なコマンドラインオプションすべてに対応しています。ただしファイル転送ツールには無意味なものは除きます。オプションの説明は section 3.11.3 を参照してください。 (PSCP の対応していないものはそのように書かれています。)

PSCP に独自のオプションもいくつか存在します。以下のセクションで PSCP 特有のコマンドラインオプションについて説明します。

5.2.2.1 -ls リモートファイルの一覧

-ls オプションは何もファイルを転送しません。代わりにリモートのファイルを一覧表示します。ホスト名とオプションでリモートファイルの記述のみを与えます。例えば:

pscp -ls fred@example.com:dir1

SCP プロトコル自体にはファイル一覧を行うコマンドがありません。 SCP を使った場合、このオプションはサーバが ls -la コマンドに応答するものとして実行します。そのためすべてのサーバで動作するとは限りません。

SFTP を使っている場合、このオプションはすべてのサーバで動作するはずです。

5.2.2.2 -p ファイルの属性を維持する

デフォルトでは PSCP でコピーしたファイルの更新日時はコピーした時刻になります。 -p オプションで元ファイルの時刻をコピーに適用します。

5.2.2.3 -q 無口(quiet), 状態を表示しない

デフォルトでは PSCP は転送の進捗をメーターで表示します:

mibs.tar          |   168 kB |  84.0 kB/s | ETA: 00:00:13 |  13%

各フィールドの表示は (左から順に) ファイル名、転送済みサイズ (KiB)、転送速度の概算 (KiB/秒)、終了予定の時刻、転送済みの割合です。 -q オプションで PSCP はこれらの情報を表示しなくなります。

5.2.2.4 -r ディレクトリを再帰的にコピーする

デフォルトでは PSCP はファイルのみコピーします。指定したディレクトリとその中身はスキップされます。 -r オプションで PSCP は指定したディレクトリを走査して内容をコピーします。これによって PSCP でディレクトリ構造全体をマシン間で転送できます。

5.2.2.5 -batch 対話型プロンプト無効

-batch オプションを指定すると PSCP は接続の際に対話型プロンプトを表示しません。例えばもしサーバのホスト鍵が無効ならば (section 2.3 参照)、どうするか尋ねずに接続を放棄します。

これは PSCP を自動化したスクリプトで使う場合に役に立ちます。 -batch を使うと、接続時に何か問題が起きてもバッチジョブが止まる代わりに失敗します。

5.2.2.6 -sftp, -scp 特定のファイル転送プロトコルの使用を強制する

Section 5.2.1 で説明したとおり、SSH には 2 つの異なったファイル転送プロトコルがあります。名前に反して PSCP は (他の自称 scp クライアントと同じように) どちらのプロトコルも使えます。

古い SCP プロトコルは明文化された仕様がなく、詳細がサーバ側に任されています。 ワイルドカードはサーバ側で展開されます。この単純な設計はサーバの対応するワイルドカード仕様は何でも使える (ブレース {} 展開など) ということですが、ファイル名のクオート (例えばファイル名に空白が含まれる場合) などに相互運用性の問題や、section 5.2.1 で述べたセキュリティの問題を引き起こします。

より新しい SFTP プロトコルは、通常 SSH-2 サーバに付属しており、よりプラットフォームに依存しない形で仕様化されています。 (PuTTY の SFTP ワイルドカード文法は section 6.2.2 で説明しています。) これによってプラットフォーム間でより一貫して使え、スクリプトや自動化により適しており、ワイルドカードの一致に関するセキュリティ問題を回避できます。

通常 PSCP は SFTP プロトコルを使おうとして、サーバで SFTP が使えない場合に SCP プロトコルにフォールバックします。

-scp オプションで PSCP は SCP プロトコルを使おうとし、失敗すると終了します。

-sftp オプションで PSCP は SFTP プロトコルを使おうとし、失敗すると終了します。このオプションを指定すると PSCP は SFTP サーバをがんばって探すので、SSH-1 でもサーバのセットアップによっては SFTP が使用できます。

訳注: サーバ上の特定のパスをいくつか確認して SFTP のプログラムを探します。

5.2.2.7 -no-sanitise-stderr: エラーメッセージのサニタイズを制御する

-no-sanitise-stderr オプションで PSCP はサーバの標準エラーストリームを、最初に制御文字を除去することなく、受け取った文字通りに出力します。これはサーバが色付けしたエラーメッセージを送っている場合に便利かもしれませんが、同時にサーバはあなたの端末ディスプレイに予期しない影響を与えられるようになります。詳しい説明は section 7.2.3.5 を参照してください。

5.2.2.8 -limit num アップロード速度を制限する [Custom]

個々のファイルのアップロードが num kbps (1 kbps = 毎秒 125 バイト) の値で指定した速度以下になるよう調整します。 num は 0 以上の整数を指定します。デフォルトは 0 (無制限) です。

ファイル送信中に接続を共有している他の SSH セッションが反応しない場合などに、回線速度より遅い値を指定すると症状が改善するはずです。回線自体を占有してしまう状況にも効果がありますが、その場合はルータ等の QoS 機能を使う方が効果的かもしれません。

制限の対象は入力ファイルの送出速度であり、接続上を流れるデータの量にはよりません。実際にファイル転送で時間当たりに使用される帯域は SSH 等のプロトコルのオーバーヘッドにより指定値を超えることや、あるいはデータ圧縮によってそれ以下になることがあります。

このオプションは -sftp モード (デフォルト) の時のみ有効です。

5.2.3 返り値

PSCP が ERRORLEVEL として 0 (成功) を返すのはファイルが正しく転送された時だけです。これをバッチファイルでテストするには次のようにします:

pscp file*.* user@hostname:
if errorlevel 1 echo エラーが起きました

5.2.4 PSCP で公開鍵認証する

PuTTY のように、PSCP もパスワードの代わりに公開鍵認証を行えます。それには 3 種類の方法があります。

第一に、PSCP は PuTTY の保存済みセッションをホスト名の代わりに使えます (section 5.2.1.2 参照)。そのためこのようにできます:

訳注: セッション名の処理は Unicode 化されていないため、環境に依存しない英数字の利用を推奨します。

二つ目として、-i オプションでコマンドラインから秘密鍵を指定できます。詳しくは section 3.11.3.18 を参照してください。

三つ目として、PSCP は Pageant が実行中ならば Pageant で認証しようとします (chapter 9 参照)。そのためこのようにできます:

公開鍵認証についてのより一般的な情報は chapter 8 を参照してください。


このマニュアルや PuTTY のツールに意見がある場合は、 Feedback page を参照してください。

翻訳についてはフィードバックから送信できます。

©1997-2025 Simon Tatham ©2015-2025 SATO Kentaro

[PuTTY custom build 0.83.ranvis-doc]