Cómo pasar la contraseña para scp?
-
09-06-2019 - |
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.
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/sshpass.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.
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
asegúrese de que tiene "esperar" herramienta de antes, si no, hacerlo
# apt-get install expect
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
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
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.