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.

È stato utile?

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/ssh‌​pass.rb

basta generare una chiave ssh come:

ssh-keygen -t rsa -C "your_email@youremail.com"

copiare il contenuto di ~/.ssh/id_rsa.pube 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.

Questo è menzionato nella documentazione qui.

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

  1. assicurati di avere lo strumento "aspettato" prima, in caso contrario, fallo

    # apt-get install expect

  2. 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

  3. 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

fonte: https://community.mapr.com/thread/9040

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top