2009-09-22 14 views
6

En primer lugar, soy consciente de que hay muchas preguntas sobre este tema. Los he leído, pero todavía podría encontrar una respuesta adecuada para mi situación.¿Cómo se responde a la solicitud de contraseña cuando se usa SCP en un script de shell?

Me gustaría scp todo el ~/cs###/assign1 dir desde local a la escuela dir de inicio con un guión de shell. Mi pregunta es, ¿hay alguna manera en mi script de esperar la solicitud de contraseña y luego simular el evento de la placa clave para 'escribir' mi contraseña?


here es una guía muy detallada de cómo configurar la clave

+0

Esta pregunta suena exactamente igual que su situación: http://stackoverflow.com/questions/50096/how-to-pass-password-to-scp – innaM

+0

Tenga en cuenta que las respuestas a la pregunta duplicado putativa no mencionan 'claves ssh 'como lo menciona BZ. –

+0

Tenía la esperanza de que podría haber una solución usando solo comandos simples de shell o unix. – derrdji

Respuesta

10

son claves ssh no permitido? Esa sería una mejor solución.

+2

Sí, esa es la clave. :-) –

2

No creo que pueda hacer eso fácilmente. Lo que puede hacer es usar 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, oye, no es una falla del servidor, ¿o sí? ;-)

+0

El servidor y todo fue configurado por la escuela, no tengo control de la configuración en ese extremo – derrdji

+2

Estas configuraciones están en su directorio de inicio. –

3

Considere utilizar claves o una biblioteca externa.

No creo que sea posible (espero que no me equivoque), ya que impone la intrusión automática de fuerza bruta y el rastreo de contraseñas.

Hay bibliotecas que pueden hacer lo que quiera (use el protocolo SFTP, no llame a scp), como libssh.

De nuevo, recomiendo encarecidamente las llaves.

+0

Vamos, la automatización de los ataques de fuerza bruta también se puede hacer usando las bibliotecas ;-) –

0

Si puede montar el directorio desde una máquina con Windows (por ejemplo, a través de AFS, NFS o SMB que todos los laboratorios de Windows de mi universidad), puede usar pscp con el modificador -pw.

-1

¿Por qué no usar la opción "-r" para copiarlo recursivamente? ¿O usar rsync en su lugar?

También puede usar la autenticación de clave pública, que no requiere ayuda en su parte siempre que tenga una cuenta de usuario real. Ver this

0

Usted no dice qué plataforma está utilizando en casa y en la escuela.Suponiendo Linux, Cygwin u OS/X tiene varias opciones:

  1. autenticación de clave pública si no ha sido desactivado en el servidor
  2. ssh-agent y ssh-add que introducir su contraseña una vez por sesión

Para la opción (1), que sería

  1. generar un par de claves en casa usando ssh-keygen, sin frase de contraseña en la clave privada. Tenga en cuenta que omitir una frase de contraseña probablemente no sea una buena idea si otras personas usan la misma computadora, pero su objetivo era tener que escribir la contraseña.
  2. cargar la clave pública a la cuenta de la escuela y colocarlo en ~/.ssh/authorized_keys
  3. Uso SCP con el "-i identityfile" opción, donde identityfile es el ruta completa de la clave privada. O bien, agregue una entrada a .ssh/config (consulte las páginas man)

Para la segunda opción, ssh-agent le permite almacenar en caché su contraseña en un proceso local una vez por sesión. Establece una fecha de caducidad

1

Acepto que debe usar las teclas. Pero expect puede automatizar el aspecto interactivo del proceso SI desea codificar su contraseña en un archivo de script de texto sin formato.

10

¡Utilice "sshpass"!

#!/bin/bash 
sshpass -p "password" scp -r /some/local/path [email protected]:/some/remote/path 
+0

'sshpass' parece interesante. Trabajando en un sistema que no funcionará bien con las claves SSH, así lo hará. ¡Gracias! – JakeGould

0

Como muchos ya han dicho que usar las llaves ssh sería la manera más segura y mejor. Si alguien más todavía se pregunta y busca ayuda, en la ayuda de Ubuntu hay un way rápido y directo para usar las claves ssh.

0

Una vez que configure ssh-keygen como se explica here, puede hacerlo

scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/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 [email protected]:/path/in/remote/server/ 

Luego de su terminal de hacer source ~/.bash_profile. Luego, si escribe remote_scp en su terminal, debe ejecutar el comando scp sin contraseña.

Cuestiones relacionadas