SSH-tunnelin perustaminen plinkillä
Yhtiössämme voimme muodostaa yhteyden ulkomaailmaan vain vakioportteja käyttäen. Porttiin 8081 lähtevä liikenne on estetty palomuurin toimesta. Tämä on todellinen riesa. Meidän on julkaistava Javascript-kirjastomme Nexus-instanssissa. Tämä instanssi toimii pilvessä portissa 8081.
Käytämme jo Jenkinsin putkia työnkulkujemme automatisointiin. Päätettiin lisätä putkeen uusi vaihe: ssh-tunnelointi. Jenkins-instanssimme toimii Windows Server 2012 R2:ssa. Tunnelin luominen bashin avulla ei onnistu. Tutustuimme Powershelliin SSH-tunnelin luomiseksi, mutta näyttää siltä, että SSH:n toteutus Powershellissä ei ole tarpeeksi kypsä. Eräskriptit pelastavat!
Vähemmistö meistä käyttää Puttya SSH-istuntojen käsittelyyn. Ihmiset, jotka tekevät Puttyn, tekevät myös plinkin, joka on komentoriviliittymä Puttyn back-endiin. Yhdessä batch-tiedostojen kanssa voimme luoda SSH-tunnelin näin:
plink -v -x -a -T -C -noagent -ssh -pw "password" -L 8081:our-nexus-instance.com:8081 [email protected]
Sallikaa minun selittää yllä olevassa komennossa käytetyt eri liput:
- -v : näytä sanalliset viestit
- -x: ota käyttöön X11-tiedonsiirto
- -a: ota käyttöön agentti-tiedonsiirto
- -T: poista pty:n jako käytöstä
- -C: enable compression
- -noagent: disable use of Pageant (tarvitaan vain käytettäessä SSH-avaimia)
- -ssh: käytä SSH-protokollaa
- -pw: anna salasana
- -L: välitä paikallinen portti etäosoitteeseen
Käyttämällä lippua ”-L” pystymme kartoittamaan paikallisen portin etäporttiin. Tämä tehdään käyttämällä seuraavaa syntaksia: <localport>:<remoteAddress>:<remotePort>. Tätä seuraa isäntänimi, johon haluamme muodostaa yhteyden, etuliitteenä käyttäjätunnus, jota käytetään yhteyden muodostamiseen: käyttäjätunnus@remoteHost.
Sisällyttämällä tämän komennon Jenkins-tiedostoomme voimme avata tunnelin etä-Nexus-instanssimme kanssa:
stage('Publish') {
steps {
bat "plink -v -x -a -T -C -noagent -ssh -pw 'password -L 8081:our-
nexus-instance:8081 [email protected]"
}
}