回答:
あなたのローカルシェル(おそらくbash)は拡大しています
user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4}
に:
user@host:/home/user/something/file1 user@host:/home/user/something/folder1 user@host:/home/user/something/folder2 user@host:/home/user/something/folder3 user@host:/home/user/something/folder4
代わりに、次のことができます。
scp -r -P PORT user@host:"/home/user/something/file1 /home/user/something/folder1 /home/user/something/folder2 /home/user/something/folder3 /home/user/something/folder4" folder/folder2/
または、リモートエンドのユーザーのログインシェルがbashであることがわかっている場合は、ブレース展開も使用できます。
scp -r -P PORT user@host:"/home/user/something/{file1,folder1,folder2,folder3,folder4}" folder/folder2/
リモートシェルで文字列をローカルシェルではなく引数に分割する。
はい、それは正常です。シェルがコマンドを実行する前に中括弧を展開するので、実際に実行しているのは
scp -r -P PORT user@host:/home/user/something/file1 \
user@host:/home/user/something/folder1 \
user@host:/home/user/something/folder3 \
user@host:/home/user/something/folder4 folder/folder2
基本的に、scp
複数の接続要求を確認するため、それぞれの新しい接続を開きます。一方通行最も簡単な方法(@geirhaで提案されているように引用符を使用すると、1回限りの操作の方が簡単です)これを解決するには、パスワードなしssh
/ を設定しますscp
。
$ ssh-keygen
$ ssh-copy-id -p PORT user@host
一度これらの2つのコマンドを実行している(し、必要に応じてプロンプトに答える)した後、次のことができるようになりますssh
/ scp
将来のすべてのssh接続のためのパスワードを使用しません。これは、i)実際により安全で、ii)はるかに便利です。
id.rsa
は600
デフォルトで権限があり、権限ssh
がない場合でも機能しません。つまり、誰からもroot
安全ですがroot
、パスワードからではなく、本当に安全なものはありません。
ssh-keygen
、2)ssh / scpは他の人がファイルを読み取れる場合、文句を言ってパスワードを要求するため、言及する価値があるとは思いませんでした。とにかく、少なくともLinuxでは。
scp
同じリモートホストからのファイルである複数のコマンドライン引数が与えられると、各引数に対して新しい接続を開きます。
のrsync
代わりに使用できますscp
。この方法(および他の方法)の方が賢くなっています。
rsync -r -e 'ssh -P PORT' user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/
別のアプローチは、複数のファイルを説明する単一の引数scp
を渡すことです。
別のアプローチは、常に認証する必要がないようにシステムをセットアップすることです。できれば、ほとんどのシナリオでより便利で安全なキー認証を設定します。または、またはさらに、接続共有を設定して、セッションごとに認証が1回だけ必要になるようにします。いずれの場合も、毎回ユーザー名とポートを指定する必要がないようにエイリアスを設定します。あなたの~/.ssh/config
:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Host nick
HostName real-host-name.example.com
User bob
Port 1234
実行ssh -Nf nick
して接続を開くと、以降のすべての接続nick
が既存の接続に便乗します。今すぐ実行できます
scp -r nick:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/