ダウンロード用に選択したファイルとディレクトリを含むSCPコマンドは、新しいファイルまたはディレクトリごとにパスワードを要求します


9

私のFedora 20システムでは、scpを頻繁に使用しています。これは、次のコマンドを実行したときに2回目に遭遇します。

scp -r -P PORT user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/

転送する各ファイル/ディレクトリのパスワードを要求します。

user@host's password: "password here"

質問:

ここで何が起きてるの?

これは正常ですか、これは非常に特異な動作だと思いますか?

回答:


13

あなたのローカルシェル(おそらく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/

リモートシェルで文字列をローカルシェルではなく引数に分割する。


5

はい、それは正常です。シェルがコマンドを実行する前に中括弧を展開するので、実際に実行しているのは

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)はるかに便利です。


+1、いい方法です(もちろん、ssh-keygenとssh-copy-idは一度だけ作成する必要があります)。私はそれがより安全だと思います...そのユーザー以外の誰もがプライベートな部分に「到達不能」であることを確認した場合に限り ...これは必ずしも簡単ではありません。
Olivier Dulac 2014年

@OlivierDulacどういう意味ですか?にid.rsa600デフォルトで権限があり、権限sshがない場合でも機能しません。つまり、誰からもroot安全ですがroot、パスワードからではなく、本当に安全なものはありません。
terdon

私はこのコメントを追加するつもりだったので、パスワードなしのアクセスを設定する人々は、秘密鍵が安全な環境にあり、読み取り不能/非共有などになっている必要があるという事実を考慮に入れます(そして理解します)。(つまり、これを指摘するのは穏やかな方法です。秘密キーの共有/アクセスを
許可する

@OlivierDulacああ、結構です。1)使用時に自動的に発生しssh-keygen、2)ssh / scpは他の人がファイルを読み取れる場合、文句を言ってパスワードを要求するため、言及する価値があるとは思いませんでした。とにかく、少なくともLinuxでは。
terdon

4

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/
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.