[eside-ghost] Recordar clave SSH
Bruno Gonzalez
stenyak en gmail.com
Jue Mayo 3 22:39:19 CEST 2012
Gracias a ambos.
Por desgracia, segun leo, paramiko me permite hacer cosas simples como
ejecutar comandos remotos o sftp, pero operar con git o cosas del estilo
parece que no.
En cuanto a expect, como suponía, requeriría codear a mano unas cuantas
ramas posibles de ejecución, para cubrir varios idiomas, los varios
programas que uso (git, rsync y demás), y posibles mensajes de error con
los que a veces me topo.
Por suerte me ha venido una idea feliz a la cabeza que lo arregla bastante
elegantemente. Explico:
Existe una historia de ssh, que permitía reutilizar conexiones existentes
para hacer logins más rápidos a un host. Basicamente, la primera conexión
es la conexión "maestra", y el resto de conexiones no son conexiones TCP
como tales, sino que se multiplexan sobre la maestra (cuya autenticación ya
ha tenido lugar, siendo por tanto innecesaria la segunda y siguientes
veces).
Si juntamos eso con el modo background de ssh (opción -f), podemos
montarnos nuestro propio cutre-ssh-agent, con timeout personalizable, y que
no depende de PKI !
Pasos:
1) Habilitar la conexión única para todo lo que use ssh por debajo (ssh,
rsync, sftp, git...), añadiendo esto al ~/.ssh/config:
Host *
ControlMaster auto
ControlPath /tmp/%r@%h:%p
2) En nuestro script, antes de nada, establecer la conexión maestra:
ssh -f user en host sleep 2h
Basicamente pide autenticación de forma interactiva (si es que hace falta),
y de seguido ejecuta en background (-f) el comando (sleep 2h) mientras
sigue ejecutando lo siguiente que haya en el script.
3) Durante las 2 horas siguientes, cualquier operación sobre ssh a ese
host, no requerirá autenticación alguna (aunque tuviera password o PKI con
password).
Cuando todas las conexiones al host se cierren (incluyendo la maestra, en
nuestro caso un sleep de 2 horas), se cierra realmente la conexion TCP, y a
partir de ese momento es necesario autenticar de nuevo para conectar.
2012/5/3 Mikel Olasagasti <mikel en olasagasti.info>
>
>
> 2012/5/3 Saúl Ibarra Corretgé <saghul en gmail.com>
>
>>
>>
>>
>>
>>
>> On Thursday, May 3, 2012 at 9:59 AM, Bruno Gonzalez wrote:
>>
>> > Buenas,
>> > Ando escribiendo un script que accede por ssh a un servidor varias
>> veces durante hora y pico. Me gustaría que el script, en caso de tener que
>> preguntar contraseñas, solo lo haga una vez, al principio.
>> >
>> > Como soluciones se me ocurre:
>> > - Usar expect. Nunca lo he usado, me da mala espina en general.
>> Funciona con varios idiomas? O si un usuario no tiene contraseña? O si en
>> vez de ssh a pelo, es rsync, git o svn sobre ssh?
>> > - Usar ssh-agent. Creo que requiere clave privada/publica, y no quiero
>> forzar a que el usuario cambie su método de autenticación existente.
>> > - Crear, usar y eliminar una clave temporal sin contraseña. Pero puede
>> traer problemas (claves publicas olvidadas en el server tras un kill -9 es
>> lo primero que me viene a la cabeza)
>> >
>> > Consejos?
>> >
>> > Thanks!
>> >
>> Aupa!
>>
>> Si no puedes usar clave pública, que sería mi opción preferida, yo iría a
>> con expect. Efectivamente, si ta shell te pregunta "Contraseña" en lugar de
>> "Password" estarías fucked up, pero un LC_ALL=C pasado al comando debería
>> solucionar eso...
>>
>
> Paramiko te puede evitar esos problemas.
>
> http://www.lag.net/paramiko/
>
> http://jessenoller.com/2009/02/05/ssh-programming-with-paramiko-completely-different/
>
> _______________________________________________
> eside-ghost mailing list
> eside-ghost en listas.deusto.es
> https://listas.deusto.es/mailman/listinfo/eside-ghost
>
--
Saludos,
Bruno González
_______________________________________________
Jabber: stenyak AT gmail.com
http://www.stenyak.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <https://listas.deusto.es/mailman/private/eside-ghost/attachments/20120503/170f0169/attachment.html>
Más información sobre la lista de distribución eside-ghost