¿Cómo pasar la contraseña a scp?

Sé que no es recomendable, pero ¿es posible pasar la contraseña del usuario a scp?

Me gustaría copiar un archivo a través de scp como parte de un trabajo por lotes y, por supuesto, el servidor receptor necesita una contraseña y, no, no puedo cambiarla fácilmente a la autenticación basada en claves.

Puede guiarlo con una herramienta como esperar (también hay enlaces útiles, como Pexpect para Python).

Use sshpass :

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

o al menos la contraseña no aparece en el historial de bash

 sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path 

Lo anterior copia el contenido de la ruta desde el host remoto a su local.

Instalar:

  • ubuntu / debian
    • apt install sshpass
  • centos / fedora
    • yum install sshpass
  • mac con macports
    • port install sshpass
  • mac w / brew
    • brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master‌​/Library/Formula/ssh‌​pass.rb

solo genera una clave ssh como:

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

copie el contenido de ~/.ssh/id_rsa.pub y, finalmente, agréguelo a las máquinas remotas ~/.ssh/authorized_keys

asegúrese de que la máquina remota tenga los permisos 0700 for ~./ssh folder y 0600 for ~/.ssh/authorized_keys

Si se está conectando al servidor desde Windows, la versión Putty de scp (“pscp”) le permite pasar la contraseña con el parámetro -pw .

Esto se menciona en la documentación aquí.

Puede usar el script ‘esperar’ en unix / terminal

Por ejemplo, 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} } 

ejecutar el script

 expect test.exp 

Espero que eso ayude.

Aquí hay un ejemplo de cómo lo hace con la herramienta de 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; } 

curl se puede utilizar como una alternativa a scp para copiar un archivo y admite una contraseña en la línea de comandos.

 curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/ 

Nadie lo mencionó, pero Putty scp (pscp) tiene una opción -pw para la contraseña.

La documentación se puede encontrar aquí: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp

  1. asegúrese de tener la herramienta “esperar” antes, si no, hágalo

    # apt-get install expect

  2. crea el archivo de script con el siguiente contenido. (# 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. ejecutar el archivo de script con la herramienta “esperar”

    # expect /root/scriptfile

Puede usar ssh-copy-id para agregar la clave ssh:

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

Si existe:

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

Una vez que configure ssh-keygen como se explicó anteriormente, puede hacer

scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

Si desea reducir el tipeo cada vez, puede modificar su archivo .bash_profile y poner

 alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/ 

Luego, desde su terminal, haga source ~/.bash_profile . Luego, si escribe remote_scp en su terminal, debe ejecutar el comando scp sin contraseña.

Una alternativa sería agregar la mitad pública de la clave del usuario al archivo de claves autorizadas en el sistema de destino. En el sistema desde el que inicia la transferencia, puede ejecutar un daemon ssh-agent y agregar la mitad privada de la clave al agente. El trabajo por lotes se puede configurar para usar el agente para obtener la clave privada, en lugar de solicitar la contraseña de la clave.

Esto debería ser posible en un sistema UNIX / Linux o en una plataforma Windows usando pageant y pscp.

pasos para obtener sshpass para 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 

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

Encontré esta respuesta realmente útil aquí .

 rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/ 

No solo puede pasar la contraseña, sino que también mostrará la barra de progreso al copiar. Realmente asombroso.