plinkを使ったSSHトンネルの設定

弊社では、標準ポートでしか外部と接続できないのですが、どうすればよいでしょうか。 8081番ポートへの発信はファイヤーウォールに阻まれています。 これは本当に面倒なことです。 私たちは、JavascriptライブラリをNexusインスタンスに公開する必要があります。 このインスタンスはクラウドで、ご想像のとおり、ポート 8081 で実行されています。

私たちはすでに Jenkins パイプラインを使用して、ワークフローを自動化しています。 パイプラインに新しいステップ、ssh-tunneling を追加することが決定されました。 私たちの Jenkins インスタンスは、Windows Server 2012 R2 で動作しています。 bash を使用してトンネルを作成することは実現できません。 SSHトンネルをセットアップするためにPowershellを見てみましたが、PowershellのSSHの実装は十分に成熟していないようです。 バッチスクリプトで救出!

私たちのほとんどは、SSH セッションを処理するために Putty を使用しています。 Putty を作っている人たちは、Putty のバックエンドへのコマンドライン インターフェイスである plink も作っています。 バッチファイルとの組み合わせで、次のような SSH トンネルを作ることができます:

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

上のコマンドで使われている異なるフラグを説明しましょう:

  • -v : verbose messages
  • -x: enable X11 forwarding
  • -a: enable agent forwarding
  • -T: disable pty allocation
  • -C: enable pty allocation
  • -A: enable agent forwarding
  • C: enable agent forwarding
  • T: disable pty allocation
  • C: enable compression
  • -noagent: pageant の使用を無効にする (SSH-keys を使うときだけ必要)
  • -ssh: SSH-protocol を使う
  • -pw: パスワードを提供する
  • -L: ローカルポートからリモートアドレスに転送する

-Lフラッグを使うと、ローカルポートからリモートポートにマッピングすることができます。 これは、次の構文を使用して行われます。 <localport>:<remoteAddress>:<remotePort>. このコマンドの後に、接続に使用するホスト名をユーザ名の前に付けます: username@remoteHost.

このコマンドを Jenkinsfile に挿入すると、リモート Nexus インスタンスへのトンネルを開くことができます:

コメントを残す

メールアドレスが公開されることはありません。