
Últimamente tuve que resolver un caso marginal en el que tuve que agregar una cantidad de huellas digitales del servidor a las de un usuario known_hosts
(la autorización se realiza con un par de claves). Pensé que la solución más sencilla sería simplemente llamar.
yes yes | ssh *login@host*
. Sorprendentemente (al menos para mí), esto no funciona: ssh
todavía pregunta si desea agregar la huella digital y requiere entrada manual.
Mi pregunta es: ¿por qué es este el caso, como en,¿Cuál es el mecanismo subyacente a este comportamiento??
Respuesta1
Para este mensaje, ssh
no utiliza elentrada estándar&salida estándartransmisiones: para evitar que el mensaje se mezcle con la entrada/salida del comando remoto. (Imagínese ejecutar ssh host cat something.tar | tar x
y de repente tar x
quejarse de basura en su entrada).
En su lugar, ssh
abre el dispositivo especial /dev/tty
, que siempre apunta a su "terminal de control", escribe allí el mensaje y lee la respuesta.
Para su problema específicamente, OpenSSH viene con ssh-keyscan
, una herramienta para obtener claves públicas de muchos servidores a la vez.
ssh-keyscan host1 host2 host3 >> ~/.ssh/known_hosts
(No estoy seguro de si quiso decir known_hosts
o si realmente lo necesita authorized_keys
aquí).
En el caso general, la expect
utilidad se puede utilizar para automatizar programas que normalmente realizan sus E/S a través de tty.