Configuración de un túnel SSH usando plink

En nuestra empresa, sólo podemos conectarnos al mundo exterior usando los puertos estándar. El tráfico saliente al puerto 8081 está bloqueado por el firewall. Esto es un verdadero dolor de cabeza. Tenemos que publicar nuestras bibliotecas de Javascript a una instancia de Nexus. Esta instancia se ejecuta en la nube en, lo has adivinado, el puerto 8081.

Ya estamos usando pipelines Jenkins para automatizar nuestro flujo de trabajo. Se tomó la decisión de añadir un nuevo paso a la tubería: ssh-tunneling. Nuestra instancia de Jenkins se ejecuta en Windows Server 2012 R2. El uso de bash para crear un túnel no se puede lograr. Echamos un vistazo a Powershell para configurar el túnel SSH pero parece que la implementación de SSH en Powershell no está lo suficientemente madura. Scripts por lotes al rescate

La mayoría de nosotros usamos Putty para manejar nuestras sesiones SSH. La gente que hace Putty también hace plink, una interfaz de línea de comandos para el back-end de Putty. En combinación con archivos por lotes podemos crear un túnel SSH como este:

plink -v -x -a -T -C -noagent -ssh -pw "password" -L 8081:our-nexus-instance.com:8081 [email protected]

Déjame explicar las diferentes banderas utilizadas en el comando anterior:

  • -v : mostrar mensajes verbose
  • -x: habilitar el reenvío X11
  • -a: habilitar el reenvío de agentes
  • -T: deshabilitar la asignación de pty
  • -C: habilitar la compresión
  • -noagent: deshabilitar el uso de Pageant (sólo es necesario cuando se utilizan claves SSH)
  • -ssh: utilizar el protocolo SSH
  • -pw: proporcionar la contraseña
  • -L: reenviar el puerto local a la dirección remota

Usando la bandera -L podemos mapear un puerto local a un puerto remoto. Esto se hace utilizando la siguiente sintaxis: <localport>:<remoteAddress>:<remotePort>. Esto es seguido por el nombre de host al que queremos conectarnos, prefijado con el nombre de usuario, utilizado para conectarse: username@remoteHost.

Insertando este comando en nuestro Jenkinsfile, podemos abrir un túnel a nuestra instancia remota de Nexus:

stage('Publish') {
steps {
bat "plink -v -x -a -T -C -noagent -ssh -pw 'password -L 8081:our-
nexus-instance:8081 [email protected]"
}
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada.