「scpの使い方」の版間の差分

提供: セキュリティ
移動: 案内検索
(ページの作成:「<!-- vim: filetype=mediawiki --> ;scp:えすしーぴー __TOC__ == 概要 == scpコマンドは、ファイルをsshで転送するために利用し...」)
 
行1: 行1:
<!--
+
[[scp]]コマンドは、ファイルを[[ssh]]で転送するために利用します。
vim: filetype=mediawiki
+
-->
+
  
 +
'''読み方'''
 
;[[scp]]:えすしーぴー
 
;[[scp]]:えすしーぴー
 
 
__TOC__
 
__TOC__
  
 
== 概要 ==
 
== 概要 ==
 
 
[[scp]]コマンドは、ファイルを[[ssh]]で転送するために利用します。
 
[[scp]]コマンドは、ファイルを[[ssh]]で転送するために利用します。
 
ローカルのファイルをリモートにコピーしたり、リモートのファイルをローカルにコピーします。
 
ローカルのファイルをリモートにコピーしたり、リモートのファイルをローカルにコピーします。
  
 
== scpコマンドの使い方 ==
 
== scpコマンドの使い方 ==
 
+
ホスト foo のホームディレクトリに、ローカルの /etc/rc.conf を転送します。
foo のホームディレクトリに、ローカルの /etc/rc.conf を転送します。
+
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% scp /etc/rc.conf foo:
 
% scp /etc/rc.conf foo:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
/path/to を再帰的に foo にコピーします。
+
/path/to を再帰的に ホスト foo にコピーします。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% scp -r /path/to foo:
 
% scp -r /path/to foo:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
/path/to を再帰的に foo の /home/tmp/ にコピーします。
+
/path/to を再帰的に ホスト foo の /home/tmp/ にコピーします。
 
/home/tmp/に to のディレクトリが作成されます。
 
/home/tmp/に to のディレクトリが作成されます。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行30: 行26:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
foo の /etc/rc.conf をローカルのホームディレクトリにコピーします。
+
ホスト foo の /etc/rc.conf をローカルのホームディレクトリにコピーします。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
% scp foo:/etc/rc.conf ~/
 
% scp foo:/etc/rc.conf ~/
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
== ユーザー名を指定する ==
  
== 関連項目 ==
+
ホスト foo に ユーザー user1 でログインしてコピーします。
 +
ユーザー名とホスト名は、 @ で区切ります。
 +
<syntaxhighlight lang="bash">
 +
% scp -r /path/to user1@foo:
 +
</syntaxhighlight>
  
* [[scp]]
+
== リモートからリモートへダイレクトにコピーする ==
 +
ホスト hoge で ホスト foo から ホスト bar へコピーする。
 +
 
 +
<syntaxhighlight lang="bash">
 +
hoge% scp foo:/tmp/a bar:/tmp/b
 +
</syntaxhighlight>
 +
 
 +
ファイルは、ホスト hoge を経由しません。 foo から bar へダイレクトに転送されます。
 +
 
 +
== リモートからリモートへのコピー時にバイパスする ==
 +
 
 +
リモートからリモートへのコピーは、デフォルトでは、ダイレクトに行われます。
 +
<syntaxhighlight lang="bash">
 +
hoge% scp foo:/tmp/a bar:/tmp/b
 +
</syntaxhighlight>
 +
 
 +
<pre>
 +
hoge
 +
 
 +
foo -> bar
 +
</pre>
 +
 
 +
foo から bar へのファイル転送時に、[[scp]] コマンドの実行ホストを経由(バイパス)して転送できます。
 +
 
 +
<syntaxhighlight lang="bash">
 +
hoge% scp -3 foo:/tmp/a bar:/tmp/b
 +
</syntaxhighlight>
 +
 
 +
<pre>
 +
foo -> hoge -> bar
 +
</pre>
 +
 
 +
これは、リモートからリモートに直接的にコピーできないネットワーク構成 / [[ACL]] の場合に有効です。
 +
 
 +
== NetCat モード ==
 +
 
 +
[[OpenSSH]] 5.4 以上の [[scp]] には、 [[netcat]] モード ([[ncat]] ) があります。
 +
 
 +
ファイルの転送先のリモートホストがゲートウェイサーバー(gw) を経由しないとリーチできない場合、[[scp]] は、直接ファイルが転送できないため、ゲートウェイサーバーを経由しなければなりません。
 +
これは、[[ネットワーク]]の[[ACL]]の制限などによるものです。
 +
<pre>
 +
foo -> gw -> bar
 +
</pre>
 +
 
 +
昔からあるテクニックとして、[[ncat]] ([[nc]]) などのコマンドと [[ssh_config]] の ProxyCommand のオプションを使用して、ファイルを転送してきました。
 +
近年の[[OpenSSH]] の [[scp]] には、[[netcat]] モードが追加されています。そのため、[[ncat]] / [[netcat]] ([[nc]]) を使わずに、行うことができます。
 +
 
 +
~/.ssh/[[ssh_config]] に以下の設定を行います。
 +
<syntaxhighlight lang="bash">
 +
Host bar
 +
ProxyCommand ssh user@gw -W %h:%p
 +
</syntaxhighlight>
 +
 
 +
ゲートウェイサーバーの [[sshd]] の [[sshd_config]] で[[ポートフォワーディング]] を 許可する必要があります。
 +
 
 +
<syntaxhighlight lang="bash">
 +
AllowTcpForwarding yes
 +
</syntaxhighlight>
 +
 
 +
[[scp]] コマンドは、以下の通りです。
 +
<syntaxhighlight lang="bash">
 +
foo% scp /tmp/a bar:/tmp/a
 +
</syntaxhighlight>
 +
 
 +
== 関連項目 ==
 +
* [[sftp]]
 +
* [[scpとsftpの違い]]
 +
* [[sftpでchrootする設定]]
 +
* [[sftpのみを許可する方法]]
 
* [[ssh]]
 
* [[ssh]]
 
* [[sshの使い方]]
 
* [[sshの使い方]]
 
* [[rsync]]
 
* [[rsync]]
 +
* [[Secure Shell]]
 +
* [[ssh]]
 +
* [[ftp]]
 +
<!--
 +
vim: filetype=mediawiki
 +
-->

2013年10月4日 (金) 22:48時点における版

scpコマンドは、ファイルをsshで転送するために利用します。

読み方

scp
えすしーぴー

概要

scpコマンドは、ファイルをsshで転送するために利用します。 ローカルのファイルをリモートにコピーしたり、リモートのファイルをローカルにコピーします。

scpコマンドの使い方

ホスト foo のホームディレクトリに、ローカルの /etc/rc.conf を転送します。

% scp /etc/rc.conf foo:

/path/to を再帰的に ホスト foo にコピーします。

% scp -r /path/to foo:

/path/to を再帰的に ホスト foo の /home/tmp/ にコピーします。 /home/tmp/に to のディレクトリが作成されます。

% scp -r /path/to foo:/home/tmp/

ホスト foo の /etc/rc.conf をローカルのホームディレクトリにコピーします。

% scp foo:/etc/rc.conf ~/

ユーザー名を指定する

ホスト foo に ユーザー user1 でログインしてコピーします。 ユーザー名とホスト名は、 @ で区切ります。

% scp -r /path/to user1@foo:

リモートからリモートへダイレクトにコピーする

ホスト hoge で ホスト foo から ホスト bar へコピーする。

hoge% scp foo:/tmp/a bar:/tmp/b

ファイルは、ホスト hoge を経由しません。 foo から bar へダイレクトに転送されます。

リモートからリモートへのコピー時にバイパスする

リモートからリモートへのコピーは、デフォルトでは、ダイレクトに行われます。

hoge% scp foo:/tmp/a bar:/tmp/b
hoge

foo -> bar

foo から bar へのファイル転送時に、scp コマンドの実行ホストを経由(バイパス)して転送できます。

hoge% scp -3 foo:/tmp/a bar:/tmp/b
foo -> hoge -> bar

これは、リモートからリモートに直接的にコピーできないネットワーク構成 / ACL の場合に有効です。

NetCat モード

OpenSSH 5.4 以上の scp には、 netcat モード (ncat ) があります。

ファイルの転送先のリモートホストがゲートウェイサーバー(gw) を経由しないとリーチできない場合、scp は、直接ファイルが転送できないため、ゲートウェイサーバーを経由しなければなりません。 これは、ネットワークACLの制限などによるものです。

foo -> gw -> bar

昔からあるテクニックとして、ncat (nc) などのコマンドと ssh_config の ProxyCommand のオプションを使用して、ファイルを転送してきました。 近年のOpenSSHscp には、netcat モードが追加されています。そのため、ncat / netcat (nc) を使わずに、行うことができます。

~/.ssh/ssh_config に以下の設定を行います。

Host bar
	ProxyCommand ssh user@gw -W %h:%p

ゲートウェイサーバーの sshdsshd_configポートフォワーディング を 許可する必要があります。

AllowTcpForwarding yes

scp コマンドは、以下の通りです。

foo% scp /tmp/a bar:/tmp/a

関連項目