example - comando scp linux
¿Cómo pasar la contraseña a scp? (14)
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, por supuesto, el servidor receptor necesita una contraseña y, no, no puedo cambiarlo fácilmente a la autenticación basada en claves.
asegúrate de tener la herramienta "expectativa" antes, si no, hazlo
# apt-get install expect
Crea un 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
ejecutar el archivo de script con la herramienta "esperar"
# expect /root/scriptfile
Aquí hay un ejemplo de cómo lo haces con la herramienta 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;
}
He encontrado esta respuesta realmente útil here .
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
No solo puede pasar allí la contraseña, sino que también mostrará la barra de progreso al copiar. Realmente asombroso.
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
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"
Puede usar el script ''expect'' en unix / terminal
Por ejemplo crear ''test.exp'':
#!/usr/bin/expect
spawn scp /usr/bin/file.txt root@<ServerLocation>:/home
set pass "Your_Password"
expect {
password: {send "$pass/r"; exp_continue}
}
ejecuta el script
expect test.exp
Espero que eso ayude.
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
.
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 está iniciando la transferencia, puede ejecutar un demonio 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 la plataforma de Windows usando pageant y pscp.
Una vez que configura 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 disminuir la escritura cada vez, puede modificar su archivo .bash_profile
y poner
alias remote_scp=''scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/
Entonces desde su terminal haga source ~/.bash_profile
. Luego, si escribe remote_scp
en su terminal, debe ejecutar el comando scp
sin contraseña.
Utilice sshpass :
sshpass -p "password" scp -r [email protected]:/some/remote/path /some/local/path
o así la contraseña no se muestra 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 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
-
curl se puede usar 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/
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
solo genera una clave ssh como:
ssh-keygen -t rsa -C "[email protected]"
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