Il comando SCP con il file selezionato e le directory per il download richiedono la password per ogni nuovo file o directory


9

Sul mio sistema Fedora 20 uso molto scp, e questa è la seconda volta che incontro questo, quando eseguo questo comando:

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

mi chiede la password per ogni file / directory che trasferisce.

user@host's password: "password here"

Domanda:

Cosa sta succedendo qui?

È normale, penso che sia un comportamento molto singolare?

Risposte:


13

La tua shell locale (probabilmente bash) si sta espandendo

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

in:

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

Invece, puoi fare:

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/

oppure, se sai che la shell di accesso dell'utente all'estremità remota è bash, puoi usare anche l'espansione del controvento:

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

per fare in modo che la shell remota divida la stringa in argomenti anziché nella shell locale.


5

Sì, è normale Quello che succede è che la tua shell espande le parentesi graffe prima di eseguire il comando, quindi quello che stai effettivamente eseguendo è

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

Fondamentalmente, scpvede più richieste di connessione, quindi apre una nuova connessione per ognuna di esse. Senso unicoIl modo più semplice(usare le virgolette come suggerito da @geirha è più semplice per un'operazione una tantum) per risolvere questo problema è impostare senza password ssh/ scp:

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

Dopo aver eseguito questi due comandi una volta (e aver risposto alle richieste secondo necessità), sarai in grado di ssh/ scpsenza usare una password per tutte le future connessioni ssh. Questo è i) in realtà più sicuro e ii) molto più conveniente.


+1, bel modo (ovviamente ssh-keygen e ssh-copy-id devono essere creati una sola volta). Direi che è più sicuro ... solo se ti assicuri che la parte privata sia "irraggiungibile" da chiunque tranne quell'utente ... Il che non è sempre facile.
Olivier Dulac,

@OlivierDulac che vuoi dire? Il id.rsaavranno 600i permessi di default e sshnon funziona anche se non è così. Ciò significa che è al sicuro da chiunque, ma rootnulla è veramente al sicuro root, certamente non le password.
terdon

Volevo solo aggiungere questo commento, in modo che le persone che impostano un accesso senza password tengano conto (e apprezzino) del fatto che la chiave privata deve trovarsi in un ambiente sicuro e illeggibile / non condiviso / ecc. (vale a dire, è un modo gentile di evidenziarlo, poiché coloro che chiedono potrebbero non conoscere tutte le implicazioni che potrebbe avere la condivisione / accesso alla chiave privata)
Olivier Dulac,

@OlivierDulac ah, abbastanza giusto. Non pensavo che valesse la pena menzionarlo perché 1) succede automaticamente quando si usa ssh-keygene 2) ssh / scp si lamenterà e chiederà una password se il file è leggibile da chiunque altro. Almeno su Linux comunque.
terdon

4

scp non è molto intelligente: quando vengono forniti più argomenti della riga di comando che sono file dallo stesso host remoto, apre una nuova connessione per ogni argomento.

Puoi usare rsyncinvece di scp, è più intelligente in questo modo (e in altri modi).

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

Un altro approccio è passare un singolo argomento a scpquello che descrive più file .

Un approccio diverso consiste nell'impostare il sistema in modo da non doverti autenticare continuamente. Preferibilmente, impostare l'autenticazione con chiave , che è nella maggior parte degli scenari sia più conveniente che più sicura. In alternativa, o in aggiunta, imposta la condivisione della connessione , in modo da autenticarti solo una volta per sessione. In ogni caso, imposta un alias in modo da non dover specificare il nome utente e la porta ogni volta. Nel tuo ~/.ssh/config:

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

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

Esegui ssh -Nf nickper aprire una connessione, quindi tutte le connessioni successive nickverranno trasferite sulla connessione esistente. Ora puoi semplicemente correre

scp -r nick:/home/user/something/{file1,folder1,folder2,folder3,folder4} folder/folder2/
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.