rascal-pendular, bear-den, and no entry

前へ | 目次 | 索引 | 次へ

Chapter 6: PSFTP で安全にファイルを転送する

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

PSFTP は次の点で PSCP と異なります:

6.1 PSFTP を起動する

通常 PSFTP は PSCP のようにコマンドプロンプトから起動します。そのため PATH か現在のディレクトリにそれが配置されていなくてはなりません。 PSFTP のあるディレクトリを PATH 環境変数に入れるには、コンソールウインドウに以下をタイプします:

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

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

PSCP と違い、PSFTP は複雑なコマンドラインの構文はありません。ホスト名と、多分ユーザ名を指定するだけです。

psftp server.example.com

もしくは

psftp fred@server.example.com

代わりに、psftp とだけ入力する (それか Windows GUI 上で PSFTP のアイコンをダブルクリックする) と、PSFTP のプロンプトが表示され、PSFTP がサーバに接続されていないというメッセージが表示されます:

C:\>psftp
psftp: no hostname specified; use "open host.name" to connect
psftp>

この時点で open server.example.com または open fred@server.example.com と入力してセッションを開始できます。

訳注: 普段エクスプローラを使っている場合は、PSFTP のショートカットを作成して“作業フォルダー”に転送対象のディレクトリを指定しておくと手軽です。

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

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

6.1.1 -b: バッチコマンドの書かれたファイルを指定する

通常の操作では PSFTP はコマンドラインを表示してキーボードからのコマンドを受け付ける対話型のプログラムです。

PSFTP で自動化した処理を行う場合、前もってコマンド群を指定しておき自動的に実行させるのがよいでしょう。 -b オプションでこれができます。バッチコマンドの書かれたファイル名を指定して使用します。例えば、 sftp_update_archive.txt というファイルに次のような内容を書きます:

cd /home/ftp/users/jeff
del jam-old.tar.gz
ren jam.tar.gz jam-old.tar.gz
put jam.tar.gz
chmod a+r jam.tar.gz

そしてスクリプトを実行します

psftp user@hostname -b sftp_update_archive.txt

バッチスクリプトをこのように実行すると、コマンドのどれかが失敗した時点でスクリプト実行を中止します。この挙動を変えるには、-be オプションを指定します (section 6.1.3)。

PSFTP はバッチスクリプトが完了すると終了します。

6.1.2 -bc: バッチコマンドを実行時に表示する

-bc オプションは PSFTP が -b でバッチスクリプトを実行する時に表示する内容を変更します。 -bc オプションを指定すると PSFTP はプロンプトとコマンドを、キーボードで入力された時と同じように表示します。つまりこのように表示する代わりに:

C:\>psftp fred@hostname -b batchfile
Sent username "fred"
Remote working directory is /home/fred
Listing directory /home/fred/lib
drwxrwsr-x    4 fred     fred         1024 Sep  6 10:42 .
drwxr-sr-x   25 fred     fred         2048 Dec 14 09:36 ..
drwxrwsr-x    3 fred     fred         1024 Apr 17  2000 jed
lrwxrwxrwx    1 fred     fred           24 Apr 17  2000 timber
drwxrwsr-x    2 fred     fred         1024 Mar 13  2000 trn

このようになります:

C:\>psftp fred@hostname -bc -b batchfile
Sent username "fred"
Remote working directory is /home/fred
psftp> dir lib
Listing directory /home/fred/lib
drwxrwsr-x    4 fred     fred         1024 Sep  6 10:42 .
drwxr-sr-x   25 fred     fred         2048 Dec 14 09:36 ..
drwxrwsr-x    3 fred     fred         1024 Apr 17  2000 jed
lrwxrwxrwx    1 fred     fred           24 Apr 17  2000 timber
drwxrwsr-x    2 fred     fred         1024 Mar 13  2000 trn
psftp> quit

6.1.3 -be: エラー発生時にバッチ処理を継続する

このオプションは、バッチファイルを実行しているときにコマンドが正常に完了できなくても処理を継続させます。

例えば、ファイルを削除する時に、すでにファイルが存在しなくても問題ない場合に指定します。

6.1.4 -batch: 対話型プロンプト無効

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

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

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

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

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

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

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

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

6.2 PSFTP を実行する

PSFTP セッションを開始すると psftp> というプロンプトが表示されます。そうしたらコマンドを入力してファイル転送を実行できます。このセクションでは PSFTP で使えるコマンドすべてを記載します。

# で始まる行はコメントとして無視されます。

6.2.1 PSFTP コマンドの一般的なクオート規則

ほとんどの PSFTP のコマンドは PSFTP コマンドインタープリタによって空白で区切られた語句の列として扱われます。例えば、ren oldfilename newfilename というコマンドは 3 語に分割され、ren (コマンド名), oldfilename (名前を変えるファイル名), newfilename (新しいファイル名) となります。

たまに空白を含むファイル名を指定する必要があります。そのためには、ファイル名をダブルクオート " で囲みます。これはローカルファイル名でもリモートファイル名でも同じように動作します:

psftp> get "spacey file name.txt" "save it under this name.txt"

ダブルクオート自体はファイル名の一部として扱われません。 PSFTP によって消去されるので、内側の空白が語の区切りとして扱われないようにする役目しかありません。

ダブルクオートを使う必要があるならば (一部のリモートシステム、Unix などでは、ファイル名にダブルクオートが使えます) 、二重にするとファイル名に使うこともできます。ダブルクオートで囲った中でも外でも動作します。例えば、このコマンド

psftp> ren ""this"" "a file with ""quotes"" in it"

は現在のファイル名 "this" (前後にダブルクオートがある) をa file with "quotes" in itという名前に変更します。

(PSFTP のクオート規則の例外は ! コマンドです。コマンドラインを分割せずにそのまま Windows に渡します。 Section 6.2.19 を参照してください。)

6.2.2 PSFTP のワイルドカード

PSFTP のいくつかのコマンドは“ワイルドカード”での複数ファイルの選択に対応しています。

ローカルのファイルの指定には (例えば put の最初の引数)、ローカル OS のワイルドカード規則が適用されます。例えば Windows 上の PSFTP では *.* を指定しないと Unix の PSFTP の * と同じような効果が得られません。

リモートのファイル指定には (例えば get の最初の引数)、PSFTP は標準のワイルドカード文法を使います (POSIX ワイルドカードに似ています):

ファイル名の先頭のピリオド (.) は特別扱いしません。 Unix の一部の処理と違い get * は先頭がピリオドかどうか関係なくすべてのファイルを取得します。

6.2.3 open コマンド: セッションの開始

PSFTP を GUI でダブルクリックして開始したり、コマンドラインで psftp とだけ入力した場合、SFTP サーバに接続しないと他のコマンドを実行できません (helpquit は可能です)。

接続を確立するには、open host.name と入力するか、ユーザ名も必要ならば open user@host.name と入力します。ポートの指定もできます: open user@host.name 22

このコマンドは一度実行すると失敗したとしてももう一度実行することはできません (例えばホスト名を間違えたり接続がタイムアウトしても)。そのため接続の確立が失敗すると PSFTP はすぐに終了します。

6.2.4 quit コマンド: セッションを終了する

セッションが終わったら、quit コマンドを入力して接続を閉じます。 PSFTP が終了しコマンドラインに戻ります (もしくは GUI から起動したなら PSFTP コンソールウインドウが閉じます)。

byeexit もまったく同じ効果のコマンドとして使えます。

6.2.5 close コマンド: 接続を閉じる

ネットワーク接続を閉じたいけれど PSFTP を起動したままにしたい場合、close コマンドを使います。その後 open コマンドで新しい接続を確立できます。

6.2.6 help コマンド: 簡易オンラインヘルプを表示

help と入力すると PSFTP は実行できるコマンドの簡単な一覧を表示します。

help に続けてコマンドの名前を入力すると、例えば help get とすると PSFTP はそのコマンドの簡単な説明を表示します。

6.2.7 cdpwd コマンド: リモートの作業ディレクトリを変更する

PSFTP サーバ上の“作業ディレクトリ”を保持しています。これはコマンドが対象とするデフォルトのディレクトリです。例えば get filename.dat と入力すると PSFTP はサーバの作業ディレクトリから filename.dat を探します。

リモートの作業ディレクトリを変えるには、cd コマンドを使います。引数を指定しないと、サーバのホームディレクトリに移動します (より正確には接続の始めにいたディレクトリに戻ります)。

現在のリモートの作業ディレクトリを表示するには pwd と入力します。

6.2.8 lcdlpwd コマンド: ローカルの作業ディレクトリを変更する

リモートサーバに作業ディレクトリがあるように、PSFTP ではローカルマシンにも作業ディレクトリがあります (他の Windows プロセスと同じです)。これはコマンドが対象とするデフォルトのディレクトリです。例えば get filename.datと入力すると PSFTP はファイルをローカルの作業ディレクトリに filename.dat という名前で保存します。

ローカルの作業ディレクトリを変えるには、lcd コマンドを使います。現在のローカルの作業ディレクトリを表示するには lpwd と入力します。

6.2.9 get コマンド: サーバからファイルを取得する

サーバからファイルをダウンロードしてローカルの PC に保存するには get コマンドを使います。

最も単純な形式では、単にファイル名を指定します:

get myfile.dat

別の名前で保存したい場合はリモートの名前の後にローカルの名前を指定します:

get myfile.dat newname.dat

これでサーバ上のファイル myfile.dat を取得して、ローカルマシンに newname.dat という名前で保存します。

ディレクトリを再帰的に取得するには、-r オプションを使います:

get -r mydir
get -r mydir newname

(ハイフン - で始まるファイル名を取得する場合、-- という特別な引数を指定します。 get はそれ以降をオプションスイッチとして扱わなくなります。例: “get -- -silly-name-”)

6.2.10 put コマンド: ファイルをサーバに送信する

ローカル PC からサーバにファイルをアップロードするには put コマンドを使います。

最も単純な形式では、単にファイル名を指定します:

put myfile.dat

ファイルをリモートに別の名前で配置したい場合は、ローカルのファイル名の後にリモートの名前を指定します:

put myfile.dat newname.dat

これで myfile.dat というローカルファイルを送信して、サーバに newname.dat という名前で保存します。

ディレクトリを再帰的に送信するには、-r オプションを使います:

put -r mydir
put -r mydir newname

(ハイフン - で始まるファイル名を取得する場合、-- という特別な引数を指定します。 put はそれ以降をオプションスイッチとして扱わなくなります。例: “put -- -silly-name-”)

6.2.11 mgetmput コマンド: 複数ファイルを取得, 送信する

mgetget とほとんど同じ動作ですが、一度に複数のファイルを指定できます。これには 2 通りの方法があります:

mget の引数はそれぞれが取得するファイル名や複数のファイルに一致するワイルドカード表現として扱われます (対して get では最大で 1 つだけです。 2 つめは保存するファイルの別名になります)。

-r-- オプションは get と同様に mget でも使用できます。

mputput と似ていて、同じ差異があります。

6.2.12 regetreput コマンド: ファイル転送の再開

ファイル転送が途中で失敗すると、途中のファイルがディスクに残ります。 regetreput コマンドでファイル転送を再開できます。これらは getput コマンドと同じように動作しますが、中断したファイルを確認してそこからファイル転送を再開します。

regetreput の構文は getput とまったく同じです:

reget myfile.dat
reget myfile.dat newname.dat
reget -r mydir

これらのコマンドは主に中断したファイル転送を再開するためにあります。リモートのファイルやディレクトリ構造がどのようにも変化していない前提なので、変更があった場合は転送したファイルが破損してしまします。特に -r オプションはすでに転送が完了したファイルの変更を検知しません。

6.2.13 dir コマンド: リモートファイルの一覧を表示する

リモートの作業ディレクトリのファイル一覧を表示するには dir と入力します。

異なるディレクトリを表示するには dir に続けてディレクトリ名を入力します:

dir /home/fred
dir sources

ディレクトリの一部の一覧を表示するにはワイルドカードを指定します:

dir /home/fred/*.txt
dir sources/*.c

ls コマンドは dir とまったく同じように動作します。

6.2.14 chmod コマンド: リモートファイルのパーミッションを変更する

PSFTP は chmod コマンドを使ってサーバ上のファイルやディレクトリのパーミッションを変更できます。 Unix の chmod コマンドととても似た動作をします。

基本的な構文は chmod modes file で、modes が変更するパーミッションで file が変更するファイルです。複数のファイルやワイルドカードを指定できます。例えば:

chmod go-rwx,u+w privatefile
chmod a+r public*
chmod 640 groupfile1 groupfile2

modes パラメータは Unix 形式の 8 進法の数値を指定できます。 (意味がわからないならば使わないほうがよいでしょう。) もしくは、パーミッション変更の一覧をコンマ区切りで指定できます。それぞれの変更は:

つまり上記の例は:

これらに加え、Unix システムではいくつか特別な場合があります。 Unix 以外のシステムではおそらく使い道はありません:

訳注: 通常ディレクトリに対する書き込みと実行権限があれば中のファイルを削除できます。ディレクトリに対する sticky ビットの標準的な動作はありませんが、一般にはこのような“誰でも削除できる”状態ではなく親ディレクトリやその中のエントリの所有者だけが削除できるように制限する効果を期待します。使っている Unix のドキュメントを参照してください。

6.2.15 del コマンド: リモートのファイルを削除する

サーバのファイルを削除するには、del に続けてファイル名を入力します:

del oldfile.dat
del file1.txt file2.txt
del *.o

ファイルを複数指定した場合でも、確認なしで削除されます。

del はファイルを削除するだけです。ディレクトリを削除できません。そのためには rmdir を使います。

rm コマンドは del と同じように動作します。

6.2.16 mkdir コマンド: リモートにディレクトリを作成する

サーバにディレクトリを作るには、mkdir に続けてディレクトリ名を入力します:

mkdir newstuff

複数のディレクトリを指定して一度に作成できます:

mkdir dir1 dir2 dir3

6.2.17 rmdir コマンド: ディレクトリを削除する

サーバのディレクトリを削除するには、rmdir に続けてディレクトリ名を入力します:

rmdir oldstuff
rmdir *.old ancient

ディレクトリを複数指定した場合でも、確認なしで削除されます。

ほとんどの SFTP サーバはディレクトリ内にファイルがある場合はディレクトリを削除しません。そのため中身を最初に削除する必要があります。

6.2.18 mv コマンド: リモートのファイルを移動/名前を変更する

サーバ上のファイルの名前を変えるには、mv に続けて現在のファイル名と新しいファイル名を入力します:

mv oldfile newname

ファイルを別のディレクトリに移動しつつ名前を変更できます:

mv oldfile dir/newname

ファイル (複数でも) を既存のサブディレクトリに移動するには、ファイルを指定して (ワイルドカードで指定できます)、続けて移動先のディレクトリを指定します:

mv file dir
mv file1 dir1/file2 dir2
mv *.c *.h ..

renameren コマンドも mv と同じように動作します。

6.2.19 ! コマンド: ローカルの Windows コマンドを実行する

! コマンドでローカルの Windows コマンドを実行できます。このコマンドだけは section 6.2.1 で示した PSFTP のコマンドクオート規則に従いません。コマンドラインが ! で始まる場合、行の残りが変換されずにそのまま Windows に渡されます。

例えば、更新したファイルをダウンロードする前に既存のファイルをどけておきたい場合:

psftp> !ren myfile.dat myfile.bak
psftp> get myfile.dat

Windows の ren コマンドを使ってローカル PC のファイルの名前を変更します。

6.3 PSFTP で公開鍵認証する

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

最初に PSFTP は PuTTY の保存済みセッションをホスト名の代わりに使えます。そのため次のようにできます:

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

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

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

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


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

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

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

[PuTTY custom build 0.83.ranvis-doc]