Perintah SCP dengan file yang dipilih dan direktori untuk diunduh meminta kata sandi untuk setiap file atau direktori baru

9

Di sistem Fedora 20 saya banyak menggunakan scp, dan ini adalah kedua kalinya saya menemukan ini, ketika saya menjalankan perintah ini:

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

ia menanyakan kata sandi untuk setiap file / direktori yang ditransfer.

user@host's password: "password here"

Pertanyaan:

Apa yang terjadi disini?

Apakah ini normal, saya akan berpikir ini adalah perilaku yang sangat aneh?

sesuatu Sesuatu
sumber

Jawaban:

13

Shell lokal Anda (mungkin bash) sedang berkembang

user@host:/home/user/something/{file1,folder1,folder2,folder3,folder4}

ke:

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

Sebagai gantinya, Anda dapat melakukan:

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/

atau, jika Anda tahu shell login pengguna di ujung jarak jauh adalah bash, Anda juga dapat menggunakan ekspansi brace:

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

untuk membuat shell jarak jauh membagi string menjadi argumen, bukan shell lokal.

geirha
sumber
5

Ya itu normal. Apa yang terjadi adalah shell Anda memperluas kawat gigi sebelum menjalankan perintah sehingga Anda benar-benar menjalankannya

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

Pada dasarnya, scplihat beberapa permintaan koneksi sehingga membuka koneksi baru untuk masing-masing. Satu arahCara paling sederhana(menggunakan kutipan seperti yang disarankan oleh @geirha lebih sederhana untuk operasi satu kali) untuk menyelesaikan ini adalah dengan mengatur kata sandi ssh/ scp:

$ ssh-keygen 
$ ssh-copy-id -p PORT user@host

Setelah menjalankan kedua perintah itu satu kali (dan menjawab permintaan sesuai kebutuhan), Anda akan dapat ssh/ scptanpa menggunakan kata sandi untuk semua koneksi ssh di masa mendatang. Ini i) sebenarnya lebih aman dan ii) jauh lebih nyaman.

terdon
sumber
+1, cara yang bagus (tentu saja ssh-keygen & ssh-copy-id harus dibuat hanya sekali). Saya akan mengatakan bahwa itu lebih aman ... hanya jika Anda memastikan bagian pribadi "tidak dapat dijangkau" oleh siapa pun kecuali pengguna itu ... Yang tidak selalu mudah.
Olivier Dulac
@OlivierDulac apa maksudmu? The id.rsaakan memiliki 600hak akses secara default dan sshtidak akan bahkan bekerja jika tidak. Ini berarti aman dari siapa pun tetapi rootdan tidak ada yang benar-benar aman root, tentu saja bukan kata sandi.
terdon
Saya hanya bermaksud menambahkan komentar ini, sehingga orang yang mengatur akses tanpa kata sandi memperhitungkan (dan grok) fakta bahwa kunci pribadi harus berada dalam lingkungan yang aman dan tidak dapat dibaca / tidak dibagi / etc. (yaitu, ini adalah cara yang lembut untuk menunjukkan hal ini, karena yang bertanya mungkin tidak tahu semua implikasi yang dapat dimiliki oleh berbagi / membiarkan kunci pribadi)
Olivier Dulac
@OlivierDulac ah, cukup adil. Saya tidak berpikir itu layak disebutkan karena 1) itu terjadi secara otomatis ketika menggunakan ssh-keygendan 2) ssh / scp akan mengeluh dan meminta kata sandi jika file tersebut dapat dibaca oleh orang lain. Setidaknya di Linux.
terdon
4

scp tidak terlalu pintar: ketika diberikan beberapa argumen baris perintah yang merupakan file dari host jarak jauh yang sama, itu membuka koneksi baru untuk setiap argumen.

Anda dapat menggunakan rsyncalih-alih scp, lebih pintar dengan cara ini (dan dengan cara lain).

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

Pendekatan lain adalah memberikan argumen tunggal untuk scpmenjelaskan beberapa file .

Pendekatan yang berbeda adalah mengatur sistem Anda sehingga Anda tidak perlu mengotentikasi setiap saat. Lebih disukai, atur otentikasi kunci , yang dalam sebagian besar skenario lebih nyaman dan lebih aman. Cara lainnya, atau sebagai tambahan, atur berbagi koneksi , sehingga Anda hanya perlu mengautentikasi sekali per sesi. Bagaimanapun, atur alias agar Anda tidak perlu menentukan nama pengguna dan port setiap waktu. Di Anda ~/.ssh/config:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Host nick
HostName real-host-name.example.com
User bob
Port 1234

Jalankan ssh -Nf nickuntuk membuka koneksi, dan kemudian semua koneksi selanjutnya nickakan mendukung pada koneksi yang ada. Sekarang Anda bisa lari

scp -r nick:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/
Gilles 'SANGAT berhenti menjadi jahat'
sumber