Impostare un tunnel SSH usando plink

Nella nostra azienda, possiamo collegarci al mondo esterno solo usando le porte standard. Il traffico in uscita sulla porta 8081 è bloccato dal firewall. Questo è una vera spina nel fianco. Abbiamo bisogno di pubblicare le nostre librerie Javascript su un’istanza Nexus. Questa istanza è in esecuzione nel cloud su, avete indovinato, la porta 8081.

Stiamo già utilizzando le pipeline Jenkins per automatizzare il nostro flusso di lavoro. La decisione è stata presa per aggiungere un nuovo passo alla pipeline: ssh-tunneling. La nostra istanza di Jenkins è in esecuzione su Windows Server 2012 R2. Usare bash per creare un tunnel non è possibile. Abbiamo dato un’occhiata a Powershell per impostare il tunnel SSH, ma sembra che l’implementazione di SSH in Powershell non sia abbastanza matura. Script batch in soccorso!

La maggior parte di noi usa Putty per gestire le nostre sessioni SSH. Le persone che fanno Putty fanno anche plink, un’interfaccia a riga di comando per il back-end di Putty. In combinazione con i file batch possiamo creare un tunnel SSH come questo:

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

Lasciate che vi spieghi i diversi flag usati nel comando sopra:

  • -v : mostra i messaggi verbosi
  • -x: abilita l’inoltro X11
  • -a: abilita l’inoltro dell’agente
  • -T: disabilita l’allocazione pty
  • -C: abilita la compressione
  • -noagent: disabilita l’uso di Pageant (necessario solo quando si usano chiavi SSH)
  • -ssh: usa il protocollo SSH
  • -pw: fornisce la password
  • -L: inoltra la porta locale all’indirizzo remoto

Utilizzando il flag -L possiamo mappare una porta locale ad una porta remota. Questo viene fatto usando la seguente sintassi: <localport>:<remoteAddress>:<remotePort>. Questo è seguito dal nome dell’host a cui vogliamo connetterci, preceduto dal nome utente, usato per connettersi: username@remoteHost.

Inserendo questo comando nel nostro Jenkinsfile, possiamo aprire un tunnel verso la nostra istanza Nexus remota:

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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.