Nastavení SSH tunelu pomocí plinku
V naší firmě se můžeme připojit k vnějšímu světu pouze pomocí standardních portů. Odchozí provoz na portu 8081 je blokován bránou firewall. To je opravdu nepříjemné. Potřebujeme publikovat naše knihovny Javascript do instance Nexus. Tato instance běží v cloudu na, hádáte správně, portu 8081.
Již používáme pipeline Jenkins k automatizaci našeho pracovního postupu. Bylo rozhodnuto přidat do pipeline nový krok: ssh-tunneling. Naše instance Jenkins běží v systému Windows Server 2012 R2. Pomocí bash nelze tunel vytvořit. Podívali jsme se na Powershell pro nastavení tunelu SSH, ale zdá se, žeimplementace SSH v Powershellu není dostatečně vyzrálá. Na pomoc přicházejí dávkové skripty!
Většina z nás používá ke zpracování relací SSH nástroj Putty. Lidé, kteří vytvářejí Putty, vytvářejí také plink, rozhraní příkazového řádku pro back-end Putty. V kombinaci s dávkovými soubory můžeme vytvořit SSH-tunel takto:
plink -v -x -a -T -C -noagent -ssh -pw "password" -L 8081:our-nexus-instance.com:8081 [email protected]
Dovolte mi, abych vysvětlil různé příznaky použité ve výše uvedeném příkazu:
- -v : show verbose messages
- -x: enable X11 forwarding
- -a: enable agent forwarding
- -T: disable pty allocation
- -C:
- -noagent: zakáže použití Pageantu (nutné pouze při použití SSH-klíčů)
- -ssh: použije SSH-protokol
- -pw: poskytne heslo
- -L: předá lokální port na vzdálenou adresu
Pomocí příznaku -L můžeme namapovat lokální port na vzdálený port. To se provádí pomocí následující syntaxe: <localport>:<remoteAddress>:<remotePort>. Následuje jméno hostitele, ke kterému se chceme připojit, s předponou uživatelského jména, použitého pro připojení: username@remoteHost.
Vložením tohoto příkazu do našeho Jenkinsfile můžeme otevřít tunel do naší vzdálené instance Nexusu:
stage('Publish') {
steps {
bat "plink -v -x -a -T -C -noagent -ssh -pw 'password -L 8081:our-
nexus-instance:8081 [email protected]"
}
}
.