GNU/Linux >> Tutoriales Linux >  >> Linux

Ssh:¿secuencia de comandos para automatizar Scp en la red?

Tengo una red llena de máquinas Linux. En esta red tengo un usuario como usuario1 con la contraseña como contraseña en todas las máquinas.

Tengo el siguiente script para colocar archivos en el directorio de inicio de usuario1 en todas las máquinas de la red.

#!/usr/bin/expect -f

# connect via scp
spawn cat /home/user1/Desktop/IPlistfile.txt | while read line do
spawn scp /home/user1/Desktop/filetobesent.txt [email protected]${line}:/home/user1/Desktop
#######################
expect {
-re ".*es.*o.*" {
exp_send "yesr"
exp_continue
}
-re ".*sword.*" {
exp_send "passwordr"
}
}
interact
done

El problema es que recibo un mensaje de error como “can't read line. No such variable “. Sin embargo, si uso una dirección IP directamente en lugar de la variable de línea, puedo transferir el archivo.

Editar :El IPlistfile.txt contiene la lista de direcciones IP en mi red. Cada línea contiene una única dirección IP.

Respuesta aceptada:

Puedo pensar en un par de formas de hacer esto, pero recomiendo configurar ssh sin contraseña acceso, me lo agradecerás más tarde.

1. Configure el acceso sin contraseña a sus máquinas.

Este es, con mucho, el mejor método, ya que seguramente querrá volver a conectarse a las máquinas y esto le hará la vida mucho más fácil. También es mucho, mucho más seguro que las otras opciones, incluso si elige usar una frase de contraseña vacía, ya que no estará lanzando contraseñas sin cifrar.

Primero, crea un ssh público clave en su máquina:

ssh-keygen -t rsa

Se le pedirá una frase de contraseña que se le pedirá que ingrese la primera vez que ejecuta cualquier comando ssh después de cada inicio de sesión. Esto significa que para múltiples ssh o scp comandos, sólo tendrá que introducirlo una vez. Sin embargo, puede dejarlo vacío para tener un acceso completamente sin contraseña.

Una vez que haya generado su clave pública, cópiela (como user1 ) a cada computadora en su red:

while read ip; do 
 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$ip 
done < IPlistfile.txt

Tendrá que ingresar manualmente la contraseña para cada IP (a menos que también use una de las soluciones a continuación para este paso), pero una vez que lo haya hecho, podrá copiar archivos a cualquiera de estas máquinas con un simple:

while read ip; do
  scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Si tiene sshpass instalado, puede automatizar esto para que no tenga que escribir su contraseña para cada máquina:

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

2. Instalar sshpass

Este es un pequeño e ingenioso programa que te permite pasar un ssh contraseña como un parámetro de línea de comando. Obviamente, esta no es una solución muy segura y le recomiendo que lea la sección "Consideraciones de seguridad" de man sshpass .

De todos modos, probablemente esté disponible en los repositorios de su distribución, en sistemas basados ​​en Debian se puede instalar con

sudo apt-get install sshpass

No puedo verificar ya que no tengo una máquina basada en RedHat, pero por lo que puedo decir al buscar aquí, debería poder instalarse en Fedora con

sudo yum install sshpass

Una vez que lo tengas instalado, simplemente puedes ejecutar

SSHPASS='password'
while read ip; do
  sshpass -e scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

El -e opción le dice a sshpass para obtener la contraseña del SSHPASS variable. Esto es un poco más seguro que darlo como parámetro con -p opción.

Relacionado:¿SSH y permisos de directorio de inicio?

IMPORTANTE:

Esto fallará silenciosamente si el servidor al que se está conectando es desconocido, si su clave pública no está almacenada en su máquina. Si esto no parece funcionar, simplemente conéctese una vez (ssh o scp ) a la máquina remota y acepte su clave pública.

3. Usa pscp en cambio

pscp es una alternativa a scp que acepta la contraseña como un parámetro de línea de comandos. En sistemas basados ​​en Debian, esto se puede instalar con

sudo apt-get install putty-tools

Como dije antes, no puedo comprobarlo, pero debería poder instalarse en Fedora con

sudo yum install putty

A continuación, puede copiar sus archivos con

while read ip; do
  pscp -pw password /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Linux
  1. Ssh:¿restringir un usuario de Ssh/scp/sftp a un directorio?

  2. Ssh – ¿Pasar contraseñas a un script?

  3. Ssh:¿Scp a través de varios hosts?

  4. ¿Cómo Scp a través de una máquina intermedia?

  5. 11 comandos útiles "ssh" y "scp" en Linux

Automatice el procesamiento de imágenes con este script Bash

¿Cómo funciona SSH?

Instalar y usar WinSCP

¿Espacios para variables en Bash Script?

scp un solo archivo a múltiples ubicaciones

Ejecutando múltiples subprocesos scp simultáneamente