Come passare la password a scp?
-
09-06-2019 - |
Domanda
So che non è consigliato, ma è possibile passare la password dell'utente a scp?
Vorrei copiare un file tramite scp come parte di un lavoro batch e il server ricevente, ovviamente, necessita di una password e, no, non posso cambiarla facilmente con l'autenticazione basata su chiave.
Soluzione
Puoi scriverlo con uno strumento come aspettarsi (ci sono anche delle comode rilegature, come Aspettatevi per Python).
Altri suggerimenti
Utilizzo sshpass:
sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path
o così la password non viene visualizzata nella cronologia di bash
sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path
Quanto sopra copia il contenuto del percorso dall'host remoto a quello locale.
Installa:
- ubuntu/debian
apt install sshpass
- cento/fedora
yum install sshpass
- mac con macport
port install sshpass
- mac con birra
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
basta generare una chiave ssh come:
ssh-keygen -t rsa -C "your_email@youremail.com"
copiare il contenuto di ~/.ssh/id_rsa.pub
e infine aggiungerlo alle macchine remote ~/.ssh/authorized_keys
assicurati che la macchina remota disponga delle autorizzazioni 0700 for ~./ssh folder
E 0600 for ~/.ssh/authorized_keys
Se ti connetti al server da Windows, la versione Putty di scp ("pscp") ti consente di passare la password con il comando -pw
parametro.
Puoi usare lo script 'expect' su unix/terminal
Ad esempio, crea 'test.exp':
#!/usr/bin/expect
spawn scp /usr/bin/file.txt root@<ServerLocation>:/home
set pass "Your_Password"
expect {
password: {send "$pass\r"; exp_continue}
}
eseguire lo script
expect test.exp
Spero che aiuti.
curl può essere utilizzato come alternativa a scp per copiare un file e supporta una password sulla riga di comando.
curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
Ecco un esempio di come farlo con expect
attrezzo:
sub copyover {
$scp=Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}
+/$file");
$scp->expect(30,"ssword: ") || die "Never got password prompt from
+ $dest:$!\n";
print $scp 'password' . "\n";
$scp->expect(30,"-re",'$\s') || die "Never got prompt from parent
+system:$!\n";
$scp->soft_close();
return;
}
Nessuno ne ha parlato, ma Mastice scp (pscp) ha un'opzione -pw per la password.
La documentazione può essere trovata qui: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp
assicurati di avere lo strumento "aspettato" prima, in caso contrario, fallo
# apt-get install expect
creare un file di script con il seguente contenuto.(# vi /root/filescript)
spawn scp /path_from/file_name user_name_here@to_host_name:/path_to
expect "password:"
send put_password_here\n;
interact
eseguire il file di script con lo strumento "expect".
# expect /root/scriptfile
Una volta impostato ssh-keygen
come spiegato sopra, puoi farlo
scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
Se vuoi ridurre la digitazione ogni volta, puoi modificare il tuo .bash_profile
archiviare e inserire
alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
Quindi dal tuo terminale fallo source ~/.bash_profile
.Successivamente se digiti remote_scp
nel tuo terminale dovrebbe eseguire il file scp
comando senza password.
Puoi usare ssh-copy-id
per aggiungere la chiave ssh:
$which ssh-copy-id #check whether it exists
Se esiste:
ssh-copy-id "user@remote-system"
Un'alternativa sarebbe aggiungere la metà pubblica della chiave dell'utente al file delle chiavi autorizzate sul sistema di destinazione.Sul sistema da cui stai avviando il trasferimento, puoi eseguire un demone ssh-agent e aggiungere la metà privata della chiave all'agente.Il processo batch può quindi essere configurato per utilizzare l'agente per ottenere la chiave privata, anziché richiedere la password della chiave.
Questo dovrebbe essere fattibile su un sistema UNIX/Linux o su una piattaforma Windows utilizzando pageant e pscp.
passaggi per ottenere sshpass per rhel/centos 6:
# wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install sshpass
Ho trovato questa risposta davvero utile Qui.
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
Non solo puoi passare lì la password, ma mostrerà anche la barra di avanzamento durante la copia.Davvero fantastico.