npmのtunnel-sshを利用してSSHポートフォワーディングする

SSHでポートフォワードするのをNode.jsだけで行うことを試してみたのでその際のメモ。

下の例では、local(127.0.0.1)の13306番にアクセスするとSSH接続先のホストから接続できる mysql***.heteml.jp の3306番にフォワードしている。

npmで公開されている tunnel-ssh を利用するとシンプルにできる。

$ npm install tunnel-ssh --save

SSH接続するための設定とポートフォワードする先の設定、ローカルで接続待ちをするポート番号を指定する。

// tunnel.js
var tunnel = require('tunnel-ssh');

var config = {
    username: 'ssh-hideack',
    port: 2222,
    host: 'ssh***.heteml.jp',
    privateKey:require('fs').readFileSync('/Users/hideack/.ssh/id_rsa'),
    passphrase: '******',
    dstPort: 3306,
    dstHost: 'mysql***.heteml.jp',
    localHost: 'localhost',
    localPort: 13306
};

var server = tunnel(config, function (error, result) {
  if (error) {
    console.log(error);
    process.exit();
  }

  console.log('connected');
  // これ以降にMySQLクライアント等でlocalhostの13306番に接続する処理を書けばよい
});

というメモエントリでした。