hudson key putty host

Putty no almacenará en la memoria caché las claves para acceder a un servidor cuando se ejecute el script en hudson



key host (9)

Tuve un proceso de automatización simple para escribir que necesitaba copiar algunos archivos del servidor de Linux a Windows a través de SSH. Esto se puede lograr utilizando masilla.

SSH, como parte del protocolo, verifica la identidad del host y, si no se sabe que es correcta, le pedirá que acepte la identidad del host. Cuando conecto manualmente el servidor de Linux con masilla, no solicitará ninguna información para aceptar la identidad del host. Pero una vez puse este proceso de automatización en Hudson como trabajo programado. El mensaje exacto fue:

La clave de host del servidor no se almacena en caché en el registro. No tiene garantía de que el servidor sea la computadora que cree que es. La huella dactilar del servidor rsa2 es: ssh-rsa 1024 cc: 78: 13: a3: 68: a6: 59: 7e: b8: 23: 2d: 13: 3e: 66: 9b: b9 Si confía en este host, ingrese " y "para agregar la clave al caché de PuTTY y continuar con la conexión. Si desea continuar conectándose solo una vez, sin agregar la clave a la memoria caché, ingrese "n". Si no confía en este host, presione Retorno para abandonar la conexión. ¿Guardar clave en caché? (y / n) Conexión abandonada.

Por lo general, presiona "Y" aquí, asumiendo que la clave del host es correcta, para poder almacenarlo en una conexión futura. El almacenamiento de esto entra en el Registro bajo HKEY_CURRENT_USER / Software / SimonTatham / Putty / SshHostKeys

Pero, desafortunadamente, el proceso de automatización que se ejecuta en Hudson no puede interactuar pulsando "Y" para almacenar la clave del host en el caché de masilla. Y tampoco puedo reproducir el problema simplemente ejecutando el proceso de automatización bajo el comando dos.

¿Alguien sabe como resolver el problema?


A partir del 9 de septiembre de 2014, con la versión correspondiente de plink (probado con plink 0.66), puede usar la opción -hostkey, como se documenta aquí:

http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/accept-host-keys.html

Usando la clave en la pregunta original:

plink -hostkey cc:78:13:a3:68:a6:59:7e:b8:23:2d:13:3e:66:9b:b9 user@remote

Usé con éxito "-hostkey" en mis scripts para solucionar el problema inicial de la clave de host.

"-hostkey" también está documentado para funcionar con pscp (versión 0.66).

Tenga en cuenta que debe cambiar la clave de host si cambia de host o si el servidor sshd vuelve a calcular la clave.


Ejecutar en modo administrador desde Windows PowerShell

pscp -i /path/to/private_key source_file user@ip:/home/location


Había estado trabajando bien con

pscp file user@dest:

Pero luego tengo el mismo error. Así que lo hice:

pscp -l USERNAME -pw PASSWORD FILE 10.1.1.1:

Y eso hizo el truco para mí.


Para servidores internos, el echo y | ... ciego echo y | ... echo y | ... truco es probablemente adecuado (y super simple).

Sin embargo, para los servidores externos a los que se accede a través de Internet, es mucho más seguro aceptar la clave de host del servidor una vez en lugar de aceptar ciegamente cada vez.

Cree un archivo .reg que pueda ejecutar en las máquinas cliente.

  • Conéctate interactivamente desde cualquier máquina plink ...
  • Verificar y aceptar la clave de host.
  • Abrir regedit
  • Navegue a HKEY_CURRENT_USER/Software/SimonTatham/PuTTY/SshHostKeys
  • Haga clic con el botón derecho en la entrada (tendrá un nombre como rsa2@<port>:<address> )
  • Exportar a archivo .reg

Almacenar en caché la clave de host en las máquinas cliente

  • Ejecute el archivo .reg en cualquier máquina cliente que se conecte a ese servidor
  • Asegúrese de iniciar sesión con la cuenta de usuario que ejecutará plink (es decir, en caso de que sea una cuenta de servicio)

También tuve este problema al usar un planificador por lotes que usa la cuenta del sistema local. Con esta cuenta no puede iniciar sesión para aceptar la clave de host o configurar manualmente el valor HKEY_CURRENT_USER . Encontré que creando la siguiente clave:

HKEY_USERS/.DEFAULT/Software/SimonTatham/PuTTY/SshHostkeys

y agregar el valor de la cadena de host aquí funcionó para la cuenta del sistema local.


Tenía este problema cuando utilizaba Bazaar , y configuraba manualmente mi cliente ssh para que fuera masilla en lugar de la paramiko integrada, y obtenía exactamente el mismo problema, cuando intentaba decir que la clave no estaba en los ''hosts conocidos'' y preguntando si debo verificarlo, pero debido a que está siendo ejecutado por un programa diferente y no en un terminal normal, acaba de salir inmediatamente.

Si puede, simplemente ejecute putty y conéctese al servidor manualmente para obtener la clave pública ssh del registro, de modo que cuando el programa automatizado intente conectarse no se le presente la opción y / n.

O puede usar un pequeño script en python3 que escribí para convertir entre los dos formatos de ''host conocido'' que putty y openssh usan: https://github.com/mgrandi/openssh-putty-knownhost-converter

`


Solución a través del código: compile putty / plink para aceptar automáticamente y almacenar claves ssh

Se le solicitará que almacene las claves del host SSH en el caché. Dado que la cuenta de usuario ejecuta el plink, no tiene el host en el registro, se bloquea porque espera respuesta (sí / no ..).
Si desea resolver esto a través del código, obtenga el código fuente de la masilla, realice algunos cambios, compile y use el nuevo binario de plink, uno que almacene la clave de host ssh sin el indicador.
Cómo hacerlo ? Para las ventanas, hago lo siguiente:

  • Descargue el último código fuente de masilla de: https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
    (Busque la sección "Código fuente" y descargue "Archivo fuente de Windows")
    Atención : para abrir el código fuente de la masilla con Visual Studio, debe descargar una versión de lanzamiento . Si realiza el pago a un compromiso (o encabezado) específico, los archivos de la solución de Visual Studio no existirán, ya que se crean durante la compilación.
    Tomado de: No se puede compilar PuTTY, Plink o Pscp en Windows debido a que falta el subdirectorio Windows / MSVC

  • El código fuente debe actualizarse. Lo que queremos cambiar se encuentra en la función Verify_ssh_host_key (..) en "wincons.c". Queremos comentar la parte del código que solicita sí / no y simplemente almacenar la clave, Iniciar con comentar el código de solicitud:

    /*hin = GetStdHandle(STD_INPUT_HANDLE); GetConsoleMode(hin, &savemode); SetConsoleMode(hin, (savemode | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_LINE_INPUT)); ReadFile(hin, line, sizeof(line) - 1, &i, NULL); SetConsoleMode(hin, savemode); if (line[0] != ''/0'' && line[0] != ''/r'' && line[0] != ''/n'') { if (line[0] == ''y'' || line[0] == ''Y'') store_host_key(host, port, keytype, keystr); return 1; } else { fprintf(stderr, abandoned); return 0; }*/

Continúe con la adición de las siguientes líneas en su lugar (código responsable de almacenar la clave de host):

store_host_key(host, port, keytype, keystr); return 1;

Compile la solución y tome plink / pscp .. está listo para ir sin aviso, acepta la clave de host ssh y la almacena en el registro.


echo y | plink -ssh <username@remotemachine> -pw <password> exit plink -ssh <username@remotemachine> -pw <password> [yourcommand]

Explicación: Utilizando echo para canalizar, el usuario ingresa ''y'' en el comando seleccionado y luego sale. La siguiente instrucción invocará el ejecutable plink por segunda vez para ejecutar su comando.


echo y | pscp -i /path/to/key/file user@remote:/tmp/file . echo y | plink -i /path/to/key/file scripts.sh

almacenará la clave de host huella digital en la siguiente ubicación la primera vez, e ignorará "y" la próxima vez

HKEY_CURRENT_USER/Software/SimonTatham/PuTTY/SshHostKeys