Sätt upp en SSH-tunnel med plink
På vårt företag kan vi bara ansluta till omvärlden via standardportar. Utgående trafik till port 8081 blockeras av brandväggen. Detta är en riktig plåga. Vi måste publicera våra Javascript-bibliotek till en Nexus-instans. Denna instans körs i molnet på, du gissade det, port 8081.
Vi använder redan Jenkins pipelines för att automatisera vårt arbetsflöde. Beslutet togs att lägga till ett nytt steg i pipelinen: ssh-tunneling. Vår Jenkins-instans körs i Windows Server 2012 R2. Det går inte att använda bash för att skapa en tunnel. Vi tog en titt på Powershell för att konfigurera SSH-tunneln, men det verkar som om implementeringen av SSH i Powershell inte är tillräckligt mogen. Batchskript till undsättning!
De flesta av oss använder Putty för att hantera våra SSH-sessioner. De som gör Putty gör också plink, ett kommandoradsgränssnitt till Puttys backend. I kombination med batchfiler kan vi skapa en SSH-tunnel så här:
plink -v -x -a -T -C -noagent -ssh -pw "password" -L 8081:our-nexus-instance.com:8081 [email protected]
Låt mig förklara de olika flaggorna som används i kommandot ovan:
- -v : show verbose messages
- -x: enable X11 forwarding
- -a: enable agent forwarding
- -T: disable pty allocation
- -C: enable compression
- -noagent: inaktivera användningen av Pageant (behövs endast när SSH-nycklar används)
- -ssh: använd SSH-protokollet
- -pw: ange lösenordet
- -L: vidarebefordra lokal port till fjärradress
Med hjälp av flaggan -L kan vi mappa en lokal port till en fjärrport. Detta görs med hjälp av följande syntax: <localport>:<remoteAddress>:<remotePort>. Detta följs av värdnamnet som vi vill ansluta till, med prefixet användarnamn, som används för att ansluta: username@remoteHost.
Då vi infogar det här kommandot i vår Jenkinsfil kan vi öppna en tunnel till vår fjärran Nexus-instans:
stage('Publish') {
steps {
bat "plink -v -x -a -T -C -noagent -ssh -pw 'password -L 8081:our-
nexus-instance:8081 [email protected]"
}
}
.