Seçilen dosya ve dizinleri indirmek için SCP komutu her yeni dosya veya dizin için parola ister


9

Fedora 20 sistemimde scp'yi çok kullanıyorum ve bu komutu ikinci kez karşılaştığımda, bu komutu çalıştırdığımda:

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

aktardığı her dosya / dizin için parola ister.

user@host's password: "password here"

Soru:

Burada ne oluyor?

Bu normal mi, bunun çok tuhaf bir davranış olduğunu düşünür müyüm?

Yanıtlar:


13

Yerel kabuğunuz (muhtemelen bash) genişliyor

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

içine:

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

Bunun yerine şunları yapabilirsiniz:

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/

veya kullanıcının uzak uçtaki giriş kabuğunun bash olduğunu biliyorsanız, küme ayracı genişletmeyi de kullanabilirsiniz:

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

uzak kabuğun dizeyi yerel kabuk yerine bağımsız değişkenlere ayırmasını sağlamak için.


5

Evet, normal. Ne olur ki, komutunuz çalıştırılmadan önce kabuğunuz parantezleri genişletir, böylece gerçekten çalıştırdığınız şey

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

Temel olarak, scpbirden fazla bağlantı isteği görür , bu nedenle her biri için yeni bir bağlantı açar. Tek yönEn basit yol(bir kerelik işlem için @geirha tarafından önerildiği şekilde tırnak işareti kullanmak daha basittir) bunu çözmek şifresiz ssh/ scp:

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

Bu iki komutu bir kez çalıştırdıktan sonra (ve gerekirse istemleri yanıtladıktan sonra), gelecekteki tüm ssh bağlantıları için bir parola kullanarak ssh/ scpkullanmadan mümkün olacaksınız . Bu i) aslında daha güvenli ve ii) çok daha elverişlidir.


+1, güzel yol (tabii ki ssh-keygen & ssh-copy-id sadece bir kez yapılmalıdır). Daha güvenli olduğunu söyleyebilirim ... sadece özel bölümün bu kullanıcı dışında herhangi biri tarafından "ulaşılamaz" olduğundan emin olursanız ... Bu her zaman kolay değildir.
Olivier Dulac

@OlivierDulac ne demek istiyorsun? id.rsaOlacak 600varsayılan olarak izinleri ve sshbunları yapmazsa bile çalışmaz. Bu, herkesten güvenli olduğu anlamına gelir, ancak roothiçbir şey gerçekten güvenli rootdeğildir, kesinlikle şifreler değildir.
terdon

Sadece bu yorumu eklemek istedim, böylece şifresiz bir erişim ayarlayan insanlar özel anahtarın güvenli bir ortamda ve okunamaz / paylaşılmamış / vb. (yani, bunu belirtmek için nazik bir yol, çünkü soranlar, özel anahtara paylaşma / erişmeye izin vermenin tüm sonuçlarını bilmeyebilir)
Olivier Dulac

@OlivierDulac ah, yeterince adil. Çünkü 1) kullanırken otomatik olarak gerçekleşir ssh-keygenve 2) ssh / scp şikayet ve dosya başkası tarafından okunabilir ise bir şifre isteyecektir çünkü bahsetmeye değer düşünmüyordu . En azından Linux'ta.
terdon

4

scp çok akıllı değil: aynı uzak ana bilgisayardaki dosyalar olan birden fazla komut satırı bağımsız değişkeni verildiğinde, her bağımsız değişken için yeni bir bağlantı açar.

Bunun rsyncyerine kullanabilirsiniz scp, bu şekilde daha akıllıdır (ve başka şekillerde).

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

Başka bir yaklaşım, birden fazla dosyayı tanımlayan tek bir argüman scpiletmektir .

Farklı bir yaklaşım, sisteminizi her zaman kimlik doğrulaması yapmak zorunda kalmayacak şekilde ayarlamaktır. Tercihen, çoğu senaryoda hem daha rahat hem de daha güvenli olan anahtar kimlik doğrulamasını ayarlayın . Alternatif olarak veya ek olarak, oturum başına yalnızca bir kez kimlik doğrulaması yapmanız için bağlantı paylaşımını ayarlayın . Her durumda, her zaman kullanıcı adını ve bağlantı noktasını belirtmenize gerek kalmayacak şekilde bir takma ad oluşturun. Sizin ~/.ssh/config:

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

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

ssh -Nf nickBir bağlantı açmak için çalıştırın ve daha sonra yapılacak tüm bağlantılar nickmevcut bağlantıda geri dönecektir. Şimdi sadece koşabilirsin

scp -r nick:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.