Come passare la password a scp?

So che non è raccomandato, ma è ansible passare la password dell’utente a scp?

Mi piacerebbe copiare un file tramite scp come parte di un lavoro batch e il server ricevente ha, ovviamente, bisogno di una password e, no, non posso facilmente cambiarlo con l’autenticazione basata su chiave.

    Puoi scriverlo con uno strumento come previsto (ci sono anche collegamenti utili, come Pexpect per Python).

    Usa sshpass :

    sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path 

    o così la password non viene mostrata 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 al tuo locale.

    Installa:

    • ubuntu / debian
      • apt install sshpass
    • CentOS / fedora
      • yum install sshpass
    • mac w / macports
      • port install sshpass
    • mac w / brew
      • 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" 

    copia il contenuto di ~/.ssh/id_rsa.pub e infine aggiungilo alle macchine remote ~/.ssh/authorized_keys

    assicurarsi che la macchina remota disponga delle autorizzazioni 0700 for ~./ssh folder e 0600 for ~/.ssh/authorized_keys

    Se ci si connette al server da Windows, la versione Putty di scp (“pscp”) consente di passare la password con il parametro -pw .

    Questo è menzionato nella documentazione qui.

    È ansible utilizzare lo script ‘expect’ su unix / terminal

    Ad esempio, crea ‘test.exp’:

     #!/usr/bin/expect spawn scp /usr/bin/file.txt root@:/home set pass "Your_Password" expect { password: {send "$pass\r"; exp_continue} } 

    eseguire lo script

     expect test.exp 

    Spero che aiuti.

    Ecco un esempio di come lo fai con lo strumento expect :

     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; } 

    arricciatura 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/ 

    Nessuno lo ha menzionato, ma Putty 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 “aspetta” lo strumento prima, altrimenti fallo

      # apt-get install expect

    2. creare un file di script con il seguente contenuto. (# vi / root / scriptfile)

      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

    È ansible utilizzare ssh-copy-id per aggiungere la chiave ssh:

     $which ssh-copy-id #check whether it exists 

    Se esiste:

     ssh-copy-id "user@remote-system" 

    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 si desidera ridurre la digitazione ogni volta, è ansible modificare il file .bash_profile 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 fai source ~/.bash_profile . Successivamente, se si digita remote_scp nel terminale, è necessario eseguire il comando scp senza password.

    Un’alternativa sarebbe aggiungere la metà pubblica della chiave dell’utente al file delle chiavi autorizzate sul sistema di destinazione. Sul sistema dal quale si avvia il trasferimento, è ansible eseguire un daemon ssh-agent e aggiungere la metà privata della chiave all’agente. Il lavoro batch può quindi essere configurato per utilizzare l’agente per ottenere la chiave privata, anziché richiedere la password della chiave.

    Questo dovrebbe essere abilitato su un sistema UNIX / Linux o su piattaforma Windows usando pageant e pscp.

    passi 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 è ansible passare la password, ma mostrerà anche la barra di avanzamento durante la copia. Davvero fantastico.