Cómo responder a solicitud de contraseña cuando se utiliza SCP en un script de shell?
-
13-09-2019 - |
Pregunta
En primer lugar, soy muy consciente de que hay muchos de preguntas relacionadas con este tema. Los he leído, pero todavía podía averiguar una respuesta adecuada para mi situación.
Me gustaría scp
toda la dir ~/cs###/assign1
desde el local al directorio personal de la escuela con un script de shell. Mi pregunta es, ¿hay alguna manera en mi script que esperar a que la solicitud de contraseña, y luego simular el evento clave a bordo de 'tipo' en mi contraseña?
aquí es una guía muy detallada de cómo configurar la tecla
Solución
No se le permite claves ssh? Eso sería una solución mejor.
Otros consejos
Utilice "sshpass"!
#!/bin/bash
sshpass -p "password" scp -r /some/local/path user@example.com:/some/remote/path
No creo que se puede hacer fácilmente que. Lo que puede hacer es mediante la autenticación de clave pública en su lugar.
Algo a lo largo de estas líneas
ssh-keygen -t rsa
ssh school mkdir .ssh/
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys"
(o dsa
).
Pero bueno, no es ServerFault, ¿verdad? ; -)
Considere el uso de llaves o una biblioteca externa.
No creo que sea posible de otro modo (espero que no me equivoco), ya que impone automática de intrusos fuerza bruta y la inhalación de contraseñas.
Hay bibliotecas que pueden hacer lo que quiere (utiliza el protocolo SFTP, SCP no llamar), como libssh .
Una vez más, le recomiendo claves.
Algo como esto - http://code.google.com/p/enchanter/?
Estoy de acuerdo que se debe utilizar llaves. Pero esperan puede automatizar el aspecto interactivo del proceso si desea codificar su contraseña en una secuencia de comandos de texto sin formato archivo.
¿Por qué no usar la opción "-r" para copiarlo de forma recursiva? O utilizar rsync en su lugar?
También es posible usar la autenticación de clave pública, que no necesita ayuda en su final, siempre y cuando tenga una cuenta de usuario real. Ver este
Usted no dice la plataforma que esté utilizando en el hogar y en la escuela. Suponiendo Linux, Cygwin u OS / X tiene varias opciones:
- autenticación de clave pública si no ha sido desactivado en el servidor
- ssh-agent y ssh-add que introducir su contraseña una vez por sesión
Para la opción (1), que lo haría
- generar un par de claves en casa usando ssh-keygen, sin frase de contraseña en la clave privada. Tenga en cuenta que la omisión de una frase de contraseña no es probablemente una buena idea si otras personas utilizan el mismo equipo, pero su objetivo era conseguir alrededor de tener que escribir la contraseña.
- subir la clave pública a la escuela cuenta y colocarlo en ~ / .ssh / authorized_keys
- Uso SCP con el "-i identityfile" opción, donde es la identityfile ruta completa de la clave privada. O bien, añadir una entrada a .ssh / config (ver las páginas man)
Para la segunda opción, ssh-agent permite almacenar en caché la contraseña en un local de proceso una vez por sesión. Se establece un tiempo de expiración
Una vez que configure ssh-keygen
como se explica aquí , puede hacerlo
scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
donde id_rsa
es la clave local generada en la configuración ssh-keygen
.
Si desea disminuir escribir cada momento, puede modificar el archivo .bash_profile
y poner
alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
Luego de su terminal de hacer source ~/.bash_profile
. Posteriormente si escribe remote_scp
en su terminal debe ejecutar el comando scp
sin contraseña.
he encontrado ninguna manera de hacer esto en nuestros sistemas de forma automática - Me SSH en un solo dispositivo, y luego SSH al dispositivo siguiente, y en tanto, no puedo instalar ningún otro software. Lo que sólo puede utilizar comandos shell scripts existentes. Puedo copiar o bien todos los archivos de un tipo con, como * .png, o de uno en uno en mi archivo de script, tener que introducir la contraseña para cada archivo individual. La única cosa que yo he aportado útil era que escriba la contraseña en un archivo, se corta, y ser capaz de pegar a cada pregunta para cada archivo.