Oprettelse af en SSH-tunnel ved hjælp af plink

I vores virksomhed kan vi kun oprette forbindelse til omverdenen ved hjælp af standardporte. Udgående trafik til port 8081 er blokeret af firewall’en. Dette er virkelig irriterende. Vi har brug for at udgive vores Javascript-biblioteker til en Nexus-instans. Denne instans kører i skyen på, du gættede det, port 8081.

Vi bruger allerede Jenkins-pipelines til at automatisere vores arbejdsgang. Beslutningen blev truffet om at tilføje et nyt trin til pipelinen: ssh-tunneling. Vores Jenkins-instans kører i Windows Server 2012 R2. Det kan ikke lade sig gøre at bruge bash til at oprette en tunnel. Vi tog et kig på Powershell for at oprette SSH-tunnelen, men det ser ud til, at implementeringen af SSH i Powershell ikke er moden nok. Batch scripts til redning!

De fleste af os bruger Putty til at håndtere vores SSH-sessioner. De folk, der laver Putty, laver også plink, en kommandolinje-interface til Putty-backend’en. I kombination med batchfiler kan vi oprette en SSH-tunnel på denne måde:

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

Lad mig forklare de forskellige flag, der bruges i kommandoen ovenfor:

  • -v : vis verbose-meddelelser
  • -x: aktiver X11 forwarding
  • -a: aktiver agent forwarding
  • -T: deaktiver pty allocation
  • -C: enable compression
  • -noagent: deaktivere brugen af Pageant (kun nødvendigt ved brug af SSH-nøgler)
  • -ssh: bruge SSH-protokollen
  • -pw: angive kodeordet
  • -L: videresende lokal port til fjernadresse

Ved hjælp af -L-flaget kan vi mappe en lokal port til en fjernport. Dette gøres ved hjælp af følgende syntaks: <localport>:<remoteAddress>:<remotePort>. Dette efterfølges af det værtsnavn, vi ønsker at oprette forbindelse til, med præfiks af brugernavnet, der bruges til at oprette forbindelse: username@remoteHost.

Ved at indsætte denne kommando i vores Jenkinsfil kan vi åbne en tunnel til vores eksterne Nexus-instans:

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.