Pregunta

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

Me gustaría copiar un archivo a través de scp como parte de un lote de trabajo y el servidor de recepción, por supuesto, necesita una contraseña, y, no, no puedo cambiar fácilmente que a basada en clave de autenticación.

¿Fue útil?

Solución

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

Otros consejos

Uso sshpass:

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

o por lo que la contraseña no se muestra en el historial de bash

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

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

Instalar :

  • 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

simplemente generar una clave ssh como:

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

copiar el contenido de ~/.ssh/id_rsa.pub y, por último, añadir a las máquinas remotas ~/.ssh/authorized_keys

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

Si se conecta al servidor de Windows, la Masilla versión de scp ("pscp") le permite pasar la contraseña con la -pw parámetro.

Esto se menciona en la documentación aquí.

Usted puede utilizar el "esperar" secuencia de comandos en unix/terminal

Por ejemplo, crear 'de la prueba.exp' :

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

ejecutar la secuencia de comandos

expect test.exp 

Espero que le ayude.

curl puede ser utilizado como una alternativa a scp para copiar un archivo y es compatible con una contraseña en la línea de comandos.

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

Aquí es un ejemplo de cómo se puede hacer con expect herramienta:

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

Nadie lo dijo, pero Masilla scp (pscp) y tiene un pw opción de contraseña.

La documentación se puede encontrar aquí: https://the.earth.li/~sgtatham/masilla/0.67/htmldoc/Capítulo 5.html#pscp

  1. asegúrese de que tiene "esperar" herramienta de antes, si no, hacerlo

    # apt-get install expect

  2. crear un archivo de secuencia de comandos con el siguiente contenido.(# vi /root/archivo scripto)

    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 secuencia de comandos con "esperar" herramienta

    # expect /root/scriptfile

Una vez que hayas configurado ssh-keygen como se explicó anteriormente, usted puede hacer

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

Si quieres disminuir escribiendo cada momento, usted podrá modificar su .bash_profile archivo y poner

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

Luego, desde la terminal de hacer source ~/.bash_profile.Posteriormente si el tipo de remote_scp en su terminal debe ejecutar el scp comando sin contraseña.

Usted puede utilizar 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 alternativa sería agregar el público la mitad de la clave del usuario a las autorizadas-archivo de claves en el sistema de destino.En el sistema de iniciar la transferencia, puede ejecutar ssh-agent y agregar la mitad privada de la clave para el agente.El trabajo por lotes, puede configurarse para utilizar el agente para obtener la clave privada, en lugar de pedir la clave de la contraseña.

Este debe ser capaz de hacer-en un sistema UNIX/Linux o en Windows plataforma mediante concurso 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é este muy útil respuesta aquí.

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

No sólo se puede pasar allí la contraseña, pero también se mostrará la barra de progreso cuando se copia.Realmente impresionante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top