Configurar um túnel SSH usando plink
Na nossa empresa, só nos podemos conectar com o mundo exterior usando as portas padrão. O tráfego de saída para a porta 8081 é bloqueado pelo firewall. Isto é uma verdadeira dor de cabeça. Nós precisamos publicar nossas bibliotecas Javascript para uma instância Nexus. Esta instância está rodando na nuvem, você adivinhou, porta 8081.
Já estamos usando pipelines Jenkins para automatizar o nosso fluxo de trabalho. A decisão foi tomada para adicionar um novo passo ao pipeline: ssh-tunneling. A nossa instância Jenkins está a correr no Windows Server 2012 R2. O uso de bash para criar um túnel não pode ser alcançado. Demos uma olhada no Powershell para configurar o túnel SSH, mas parece que a implementação do SSH no Powershell não está madura o suficiente. Batch scripts para o resgate!
A maioria de nós está usando Putty para lidar com nossas sessões SSH. As pessoas que fazem o Putty também fazem plink, uma interface de linha de comando para o back-end do Putty. Em combinação com arquivos batch podemos criar um túnel SSH como este:
plink -v -x -a -T -C -noagent -ssh -pw "password" -L 8081:our-nexus-instance.com:8081 [email protected]
Deixe-me explicar as diferentes bandeiras usadas no comando acima:
- -v : mostrar mensagens verbosas
- -x: habilitar encaminhamento X11
- -a: habilitar encaminhamento de agente
- -T: desabilitar alocação pty
- -C: enable compression
- -noagent: desabilitar o uso do Pageant (somente necessário quando usando chaves SSH)
- -ssh: usar o protocolo SSH
- -pw: fornecer a senha
- -L: encaminhar porta local para endereço remoto
Usando a bandeira -L podemos mapear uma porta local para uma porta remota. Isto é feito usando a seguinte sintaxe: <localport>:<remoteAddress>:<remotePort>. Isto é seguido pelo nome da máquina a que nos queremos ligar, prefixado com o nome de utilizador, usado para ligar: username@remoteHost.
Ao inserir este comando no nosso Jenkinsfile, podemos abrir um túnel para a nossa instância remota Nexus:
stage('Publish') {
steps {
bat "plink -v -x -a -T -C -noagent -ssh -pw 'password -L 8081:our-
nexus-instance:8081 [email protected]"
}
}