2012-01-09 9 views
9

ファイルシステム上の異なるパスに存在するファイルやフォルダをscpで簡単にコピーする方法を知りたいと思います。 sshの宛先サーバはパスワードを要求し、これを設定ファイルに入れることはできません。私はscpにはスクリプトから提供できるパスワードパラメータがないことを知っていますので、今度は毎回パスワードを書き、各ファイルまたはディレクトリを1つずつコピーする必要があります。異なるパスから複数のファイルをコピーするスマートな方法usinc scp

+0

単一コマンドで複数のファイルをコピーする[scpまたはsftp]の可能な複製(http://stackoverflow.com/questions/16886179/scp-or-sftp-copy-multiple-files-with-single-command) – tripleee

答えて

4

単一のグロパターンを使用してリモートシステムからコピーするファイルのすべての名前を表すことができる場合は、これを単一のscpコマンドで実行できます。この使用法は、すべてのファイルに対してローカルシステム上の単一の保存先フォルダのみをサポートします。たとえば、次のように

scp 'RemoteHost:/tmp/[abc]*/*.tar.gz' . 

コピー名(something).tar.gzと名前ab、またはcで始まる/tmpのサブディレクトリに配置されているリモートシステムからのファイルのすべて。一重引用符は、globパターンがローカルシステム上のシェルから解釈されないように保護することです。

1つのグロブパターンとしてコピーしたいファイルをすべて表示することはできず、1つのコマンド(パスワードを1回だけ要求する単一のSSH接続)を使用してコピーを実行したい場合は、

  • sftpまたはrsyncのように、scpとは異なるコマンドを使用して、または
  • 開き、リモートホストへのSSHマスター接続をし、そのマスターの奴隷としていくつかのscpコマンドを実行します。どちらかをすることができます。スレーブはマスターコネクションにピギーバックします。マスターコネクションは開いていて、パスワードを要求しません。マスター&のスレーブ接続をsshのマンページで読んでください。
4

公開鍵をサーバー側にコピーします。サーバー側のユーザーのの〜/ .ssh /のauthorized_keys2をファイルへのファイルの〜/ .ssh/identity.pub内部

ssh-keygen -t rsa 

追加コンテンツ。これ以上パスワードを入力する必要はありません。

ただし、注意してください!あなたの "ローカルアカウント"にアクセスできる人は誰でもパスワードなしでサーバーに "ssh"することができます。すでに述べたグロブに加えて

+0

Oh私はOPにSSH鍵を使用できない理由があると思った。私は誤解しました。そのような要件はないようです。キーは、私が通常使っているものです。 – Celada

+0

私はこの方法を知っていましたが、私は.sshのような一般的なディレクトリに手を置いていませんでした。 –

11

あなたが1つの文

などで代替パス/ pathpartsを定義するために{,}を使用することができます:あなたは、公開鍵認証を使用できない場合は、scp [email protected]:/{PATH1,PATH2} DESTINATION

+6

パスワードを二度入力しないようにするには、シェルがシェルを拡張しないように、中括弧を引用またはエスケープする必要があります。例えば'scp 'user @ host:{PATH1、PATH2}' DESTINATION' – yonran

+1

ターゲットパスはどうですか? 'scp 'user @ host:{PATH1、PATH2}' DIRECTORY/{FILE1、FILE2}'のようなものを用意する方法はありますか? – Ant

2

またSSHに次の設定を追加することができます(~/.ssh/configまたは適切なコマンドライン引数として)。

ControlMaster auto 
ControlPath /tmp/ssh_mux_%h_%p_%r 
ControlPersist 2m 

この設定では、SSH接続が2分間開いたままになるため、初めてパスワードを入力するだけです。

This postこの機能の詳細については、

関連する問題