PuTTY(pscp.exe)を使ってSSH経由でWindowsとLinuxの間でファイルコピーを行う方法
Windows-Linux間でファイルを転送したい
PuTTYを使ってWindowsからLinuxなどの遠隔のサーバにアクセスできるように なると、接続しているサーバ上で編集したりしているファイルを一体どうやって Windowsマシンにコピーすればいいのだろうという疑問がわくと思います。 また、PuTTYの動作しているWindows上のファイルを一体どうやって Linuxサーバに送りつければいいのだろうと思うかもしれません。
そこで今回は、PuTTYに含まれているpscp.exe を利用したWindowsとLinuxの間のファイルコピーを行う方法 をメモしておきます。
前提
WindowsとLinuxの間でファイルをコピーする際、 Linux側のディレクトリ構造がどうなっているか は、PuTTYでSSH接続をして確かめてください。 ファイルのコピーは一発ピンポイントに行います。 どこに目的のファイルがあるか、どこにファイルを設置したいかは要注意。
Windows側でpscp.exeというプログラムを利用してコピーを行うので、 コマンドプロンプトを起動して、
>cd /d (pscp.exeの存在する場所へのパス)
などで移動しておくか、環境変数を編集してpscp.exeのある場所に PATHを通しておいて、コマンドプロンプトからpscp.exeを利用できる 状態にしてください。
パスワード認証と公開鍵認証
SSHをパスワードのみの認証で利用している場合は、pscp.exeを利用する際に、
>pscp.exe -pw "password" (そのほかのオプションなど)
としてください。また、公開鍵認証を利用している場合は、pscp.exe を利用する前に、 あらかじめpagent.exeを起動し、 鍵の追加から公開鍵を登録しておいてください。 普段PuTTYを利用している人ならいつも通りということです 公開鍵を利用する場合は、pscp.exeに先ほどのような 追加オプションは不要で、
>pscp.exe (オプションなど)
とすればOKです。これ以降、 「-pw "password"」の部分は書かない公開鍵認証のつもりで 話を進めます。
WindowsからLinuxへファイルを1つコピー
「Windowsのカレントディレクトリにあるファイルを、 Linuxのホームディレクトリにコピーする」 場合は次のようにします。
>pscp.exe win-file.txt user@server:.
「win-file.txt」は windows側のコピーしたいファイル、 「user」は、 SSHでログインするユーザ名を表しています。 「server」は、サーバのアドレスを表す192.168.1.1や ???.mine.nuを入力してください。そして、「:」はただの区切り文字で、 「.」は、宛先を表しています。 宛先は、ログインしたユーザのホームディレクトリが基準になるため、 「.」はホームディレクトリ そのままのことです。
これらを正しく設定することで、「serverにuserでログインして、 Windowsのカレントディレクトリにあるwin-file.txtというファイルを、Linux サーバのホームディレクトリにコピーできます。
win-file.txt |0 kB] 0.5 kB/s | ETA: 00:00:00 | 100%
のように表示されればコピー成功です。
以降、もう少し省略して、いろいろなパターンをメモしておきます。
WindowsからLinuxへフォルダごとコピー
windows上のフォルダを丸ごとLinuxのホームディレクトリへコピーします。
>pscp.exe -r win-folder user@server:.
「-r」を忘れると「scp: win-folder: not a regular file」 と言われます。
LinuxからWindowsへファイルを一つコピー
Linuxのホームディレクトリにあるファイルlinux-fileを Windowsのカレントディレクトリへコピーします。
>pscp.exe user@server:tmp .
「コピー元」、「コピー先」の順に書くので、今までとは逆になります。「.」は、 Windowsのカレントディレクトリを表しています。
LinuxからWindowsへディレクトリ丸ごとコピー
Linuxのホームディレクトリにあるディレクトリを丸ごとWindowsの カレントディレクトリへコピーします。
>pscp.exe -r user@server:linux-dir .
そのほかの細々したこと
以上が基本なので、あとはちょっとしたコツを知れば、何とかなります。 ということで、残りはコツを書いておきます。 例を挙げるので、参考にしてください。
カレントディレクトリ・ホームディレクトリ以外を指定する
今までは、デフォルトの位置にあるファイルやフォルダを デフォルトの位置にしかコピーできなかったので、 そこを変更するコツ。
カレントディレクトリの一つ上のfolderの中にあるwin-file.txtを サーバのホームディレクトリにあるdirディレクトリの中へコピー 区切り文字に注意。
フルパス指定する
>pscp.exe ..\dir1\win-file.txt user@server:dir/
フルパスで指定した「C:\dir\id_rsa.pub」を フルパスで指定した「/home/user2/.ssh」ディレクトリの中へ、 「authorized_keys2」という名称に変更しつつコピー
>pscp.exe C:\dir\id_rsa.pub user@server:/home/user2/.ssh/authorized_key2
スペースの入るファイル名を扱う
>pscp.exe "folder\file name.txt" user@server:"./dir name/new name"
SSH接続するポートを指定する
SSHは通常22番ポートを利用しますが、ポートを変更している場合には、次のように-Pオプションを利用します。
>pscp.exe -P 1022 win-file.txt user@server:.
lsを利用してLinux側のファイルを見る(ls)
はじめにPuTTYを利用してファイルを見た方が良いと言ったのは、 そちらのほうが使いやすいからです。ただ、pscp.exeにも、 Linux側のls結果を見る機能があります。
>pscp.exe -ls user@server:.
scp
もともとscpは、LinuxにあるSSHを利用したコピー(cp)を行うプログラムであり、 それのwindows版がpscpです。なので、今ここに書いた使い方のイメージで Linuxのscpを利用して、Linuxマシン間でファイルコピーを行うことも出来ます。
じゃぁ、Linux側でscpを使って、windowsに転送できるかというと、 それは話が別で、あくまでscpは「SSHサーバにログインして、コピーを行う」 のであって、windows側でSSHサーバを立ち上げていない限り、 それは出来ません。
まとめ
以上のようにして、WindowsとLinuxの間でファイルコピーがコマンドプロンプトから 実行できるはずです。ただ、これはあくまでPuTTYを使いたい場合であって、 全く別の方法として、「WinSCP」などもあります。
Ubuntuスタートアップバイブル
大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ
図解でわかる Linuxサーバ構築・設定のすべて