情報科学屋さんを目指す人のメモ(FC2ブログ版)

何かのやり方や、問題の解決方法をどんどんメモするブログ。そんな大学院生の活動「キャッシュ」に誰かがヒットしてくれることを祈って。

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サーバ構築・設定のすべて

Linux | コメント:0 | トラックバック:0 | 編集
このエントリーをはてなブックマークに追加 Clip to Evernote

この記事のコメント

コメントの投稿 エントリの新旧に関わらず、極力18時間中に返信します。














この記事のトラックバック

トラックバックURL: