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]"
}
}

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.