shtaxxx日記

コンピュータアーキテクチャについて研究している研究者の日記や技術紹介

SSHポートフォワーディング管理用Rubyスクリプトをgithubで公開しました

せっかくgithubのアカウントを作成したので,普段僕が最も利用している,SSHポートフォワーディングを管理するRubyスクリプトを公開しました.

shtaxxx / portforwarding

sshポートフォワーディング

sshのポートフォワーディング機能を利用することで,ゲートウェイを踏み台にして,リモートの閉じたネットワーク内の計算機への仮想的な接続を作成することができます.

どんな時に便利かというと,例えば,リモートのネットワーク内で稼働しているsubversionやgitのサーバーにコミットしたいときに,ゲートウェイを介してそのマシンへの接続を作成することで,外部からもコミットができます.

使い方

ruby pf.rb [command] [type].[name]
command
  • open: 開く
  • close: 閉じる
  • status: 現在開いているポートフォワーディングを確認
  • list: 全設定を表示
  • reopen: 現在開いているポートフォワーディングを再度開き直す
  • help: ヘルプを表示
type
  • ssh: 22
  • www: 80
  • smb: 139
  • all: 上記すべて
name

各自の設定をスクリプト上部に直接記述してください.

例えば,名前ssh0のポートを開くには,

 ruby pf.rb open ssh.ssh0

閉じるには

 ruby pf.rb close ssh.ssh0

現在開いているポートフォワーディングはpsコマンドの結果をパースして調べています.
またポートフォワーディング先のネットワーク内にいる場合には,踏み台にするマシンを変えることができるようになっています.

ポートフォワーディングを使ってリモートネットワークのSubversionリポジトリにアクセスする

Subversionの設定

.subversion/config にアクセスに利用するリモートのポートを追加します.以下のような記述を追加します.

ssh = $SVN_SSH ssh -q
mysvnserver = ssh -q -p 2240 -l shtaxxx
pf.rbでポートフォワーディングを作成する

あらかじめpf.rbのsshの項目に,以下のような設定を追加します.
2240はローカルのポート番号で上記のsvnの設定で記述したポート番号と同じにします.
192.168.0.40はリモートネットワークで最終的に接続したいサーバーのIPアドレスです.
変数GATEは自動的にグローバル変数$gatewayにて置き換えられます.

"mysvnserver"  =>"ssh -f -N -L 2240:192.168.0.40:22 GATE",

そしてターミナルで以下のコマンドを入力してポートを作成します.

ruby pf.rb open ssh.mysvnserver

次にsvnリポジトリにアクセスしてみます.
以下のコマンドでsvnrootの内容が確認できると思います.
あらかじめssh公開鍵認証とssh-agentを動作させておくとより便利でしょう.

svn ls svn+mysvnserver://localhost/svnroot/

以上で,リモートのネットワークで動作しているSubversionリポジトリにアクセスできるようになりました.

他の使い道は?

例えばリモートネットワークのローカル限定のWebページにアクセスしたり,リモートデスクトップでログインしたりとか?