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 インスタンスへのトンネルを開くことができます: