web-dev-qa-db-ja.com

SSHを介したファイル転送

私はコマンドラインでリモートサーバーにSSH接続していて、scpコマンドを使ってローカルマシンにディレクトリをコピーしようとしています。しかし、リモートサーバーはこの "usage"メッセージを返します。

[Stewart:console/ebooks/discostat] jmm% scp -p ./styles/
usage: scp [-1246BCEpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]Host1:]file1 [...] [[user@]Host2:]file2
[Stewart:console/ebooks/discostat] jmm%

双方向でファイルを転送できるようにしたいです。私が読んだものから、私は上記のコマンドがダウンロードのために、そしてscp -p [localpath] [remotepath]がアップロードのために働くであろうと思いましたか?

434
Josh Maurice

どこかにscp何かをする必要があります。あなたはscp ./styles/を持っているので、あなたはセキュアコピー./styles/を言っています、しかしそれをどこにコピーするべきではありません。

一般的には、ダウンロードしたい場合は、それが行きます:

# download: remote -> local
scp user@remote_Host:remote_file local_file 

local_fileは、実際にはコピーしているファイルを入れるディレクトリです。アップロードするには、逆になります。

# upload: local -> remote
scp local_file user@remote_Host:remote_file

ディレクトリ全体をコピーしたい場合は-rが必要になります。 scpcpと同じように考えてください。ただし、ローカルファイルだけでなくuser@remote_Host:fileでファイルを指定することができます。

編集:コメントで述べたように、ローカルホストとリモートホストのユーザー名が同じ場合は、リモートファイルを指定するときにユーザーを省略できます。

695
lemnisca

デスクトップマシンとの間でコピーする場合はWinSCPを使用します。Linuxの場合はNautilusはConnect To Serverオプションを介してSCPをサポートします。

scpはsshdを実行しているマシンにしかファイルをコピーできないため、scpを実行しているマシンからリモートマシンでクライアントソフトウェアを実行する必要があります。

コマンドラインでコピーする場合は、次のようにします。

# copy from local machine to remote machine
scp localfile user@Host:/path/to/whereyouwant/thefile

または

# copy from remote machine to local machine
scp user@Host:/path/to/remotefile localfile
153
JeeBee

移動元と移動先の両方を指定する必要があります。ディレクトリをコピーしたい場合は、-rオプションを調べてください。

そのため、リモートサーバーから現在のディレクトリに/ home/user/whateverを再帰的にコピーします。

scp -pr user@remoteserver:whatever .
22
Ken

いいえ、コピーする方法はどちらでもscp [from] [to]する必要があります

違いは、scp -p server:serverpath localpathが必要です

17
Gareth