Sé que no se recomienda, 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 el servidor receptor, por supuesto, necesita una contraseña y, no, no puedo cambiarla fácilmente a la autenticación basada en claves.

1

Usar sshpass:

sshpass -p "password" scp -r [email protected]:/some/remote/path /some/local/path

o para que la contraseña no se muestre en el historial de bash

sshpass -f "/path/to/passwordfile" scp -r [email protected]:/some/remote/path /some/local/path

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

Instalar en pc :

  • ubuntu / debian
  • centos / fedora
  • mac con macports
  • mac con cerveza
    • brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

14

solo genera una clave ssh como:

ssh-keygen -t rsa -C "[email protected]"

copiar el contenido de ~/.ssh/id_rsa.pub
y por último 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

9

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

Esto se menciona en la documentación aquí.

4

Puede escribirlo con una herramienta como suponer (también hay útiles encuadernaciones, como Pexpect para Python).

3

curl se puede utilizar como 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/

7

Puede usar el script ‘esperar’ en unix / terminal

Por ejemplo, cree ‘test.exp’:

#!/usr/bin/expect
        spawn scp  /usr/bin/file.txt [email protected]<ServerLocation>:/home
        set pass "Your_Password"
        expect {
        password: {send "$passr"; exp_continue}
                  }

ejecutar el script

expect test.exp 

Espero que eso ayude.

1

Aquí tienes un ejemplo de cómo lo haces 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;
}

1

Puedes utilizar ssh-copy-id para agregar la clave ssh:

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

Si existe:

ssh-copy-id  "[email protected]"

1

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

scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/

Si desea reducir la escritura cada vez, puede modificar su .bash_profile archivar y poner

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/

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

  1. Asegúrese de que la autenticación de contraseña esté habilitada en el servidor de destino. Si ejecuta Ubuntu, abra /etc/ssh/sshd_config en el servidor, encuentra líneas PasswordAuthentication=no y comentarlos todos (poner # al principio de la línea), guarde el archivo y ejecute sudo systemctl restart ssh para aplicar la configuración. Si no existe tal línea, entonces ha terminado.
  2. Agregar -o PreferredAuthentications="password" para usted scp comando, por ejemplo:
    scp -o PreferredAuthentications="password" /path/to/file [email protected]:/destination/directory
    

2

Aquí hay un ejemplo similar a Linux / Python / Expect de un hombre pobre basado en esta publicación de blog: Actualización de shells simples a TTY completamente interactivos. Necesitaba esto para máquinas antiguas donde no puedo instalar Expect o agregar módulos a Python.

Código:

(
    echo 'scp [email protected]:./install.sh .'
    sleep 5
    echo 'scp-passwd'
    sleep 5
    echo 'exit'
) |

python -c 'import pty; pty.spawn("/usr/bin/bash")'

Producción:

scp [email protected]:install.sh .
bash-4.2$ scp [email protected]:install.sh .
Password: 
install.sh                                 100%   15KB 236.2KB/s   00:00    
bash-4.2$ exit
exit

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

    # apt-get install expect

  2. Cree el archivo de secuencia de comandos con el siguiente contenido. (# vi / root / scriptfile)

    spawn scp /path_from/file_name [email protected]_host_name:/path_to

    expect "password:"

    send put_password_heren;

    interact

  3. ejecutar el archivo de script …