INDEX
SMB over SSH
SSHのポートフォワーディング機能を利用して、sshサーバのあるネットワークのファイルサーバ(samba)の共有フォルダにアクセスする。sshを利用するのでVPNが利用できなくてもファイヤーウォールやインターネットを超えて、Windowsのファイル共有サービスにアクセスすることが出来る。
必要なもの
- sshサーバと接続できるアカウント
- sshサーバから接続可能なファイルサーバ
- PortForward機能を持つsshクライアント
- 管理者権限の使えるWindowsマシン
sshのポートフォワーディング機能を利用するので当然その機能が必要になるが、さらに、ループバックアドレスを利用できないので、ローカル側でもポート番号だけでなくIPアドレスも指定できる必要がある。
ファイルサーバは、sambaサーバに限らず共有を利用できるWindowsマシンなどでもよい。また、アクセス制御を行っている場合は、そのアカウントも必要となる。
Windowsマシンに管理者権限が必要なのは、「Loopback Adapter」という仮想ネットワークインターフェースを追加する必要があるため。設定が済めば管理者権限は必要ない。
最低限の説明だけなので、sambaやsshサーバの設定やsshの接続設定が出来ていること。確認したのは、OpenSSHd, LANDISK, PuTTY, WinXP Pro SP2 という環境です。
準備
クライアント(Windows)の設定
仮想ネットワークアダプタをクライアントに追加する。すべて Administrator権限で行う。
- 「コントロールパネル」の「ハードウェアの追加」を開く
- 新しいハードウエアの検索では見つからないので手動で追加を行う
- 種類で「ネットワークアダプタ」を選択する
- 製造元「Microsoft」の「Microsoft Loopback Adapter」を追加する
- 「コントロールパネル」の「ネットワークとダイヤルアップ接続」を開く
- 新しく作成された「ローカル エリア接続」のプロパティを開く
- 「Microsoft ネットワーク用ファイルとプリンタ共有」のチェックを外す
- 「インターネットプロトコル(TCP/IP)」のプロパティを開く
- 169.254.0.1 など重複しないIPアドレスとネットマスクを設定する
- DNSやゲートウエイの設定は必要ない
- WINSの設定から「NetBIOS over TCP/IP を無効にする」を選択する
- 接続の名称をわかりやすい名前に変える
IPアドレスは、プライベートアドレス[1]やリンクローカルアドレス[2]あたりを使用するとよいかと…
sshクライアントの設定
※通常のSSH接続に必要な設定は出来ているものとして、ポートフォワードの設定を追加する。
仮想ネットワークアダプタのIPアドレスを 169.254.0.1。sshサーバから見たsambaサーバのIPアドレスを 192.168.0.2 とした場合、以下の様に追加する。
- ローカル側からリモート側へポートフォワーディング
- ローカルポートは「169.254.0.1:139」
- リモート側ホストは「192.168.0.2」で、ポートは「139」
また、WindowsVista で使用する場合は、139番ポートの他に445番ポートも必要となるので、445番も同様に追加する。
ちなみに、sshサーバがsambaサーバを兼ねている場合、リモート側は 127.0.0.1:139 でもよい。
接続と切断
- SSHで接続する(SSHのログインもする)
- エクスプローラなどで、「\\169.254.0.1」を指定して共有フォルダを参照する
- パスワードを聞かれる場合は、転送先のユーザ名とパスワード入力する
共有フォルダをネットワークドライブに割り当てることも出来る。当然、SSHの接続を切ると共有フォルダはみれなくなる。
hosts もしくは lmhosts ファイルに「169.254.0.1」を適当な名前で登録すれば、「\\名前」でアクセス出来る。
ソフトウエア毎の設定
仮想ネットワークアダプタのIPアドレスを 169.254.0.1。sshサーバから見たsambaサーバのIPアドレスを 192.168.0.2 とする。
PuTTY の設定
接続 - SSH - トンネル 項目に、ポートフォワードの設定を追加する。
- 源ポート:169.254.0.1:139
- 送り先:192.168.0.2:139
- ローカルにチェック
- 自動にチェック(IPv4,IPv6 でもいい)
※同様に445番も追加する。
PuTTY の pfwd の設定
ポート転送だけ必要なら、PuTTYを起動してターミナルを表示しなくても、付属のpfwdを使用すれば、ターミナルを表示せずにポート転送を行える。
通常のポート転送の設定が出来ているなら、以下のようにSMB用の設定を追加するだけです。(SEQは適当に)
SEQ=L169.254.0.1:139:192.168.0.2:139
ただ、ちょっとクセ(と言うか気をつけること)があるので自分用にメモメモ。
- 接続先のホスト鍵が PuTTY.ini に保存されていないと、接続エラーで終了してしまう。なので、一度 PuTTY で、セッションの設定をして、接続しホスト鍵を記録しておく。
- SSHサーバーアドレスの設定で、IPアドレスやホスト名の他に、PuTTY で作成したセッション名を指定できる。ただ、iniの説明では「@セッション名」となっているが「@」はいらない。
- プライベートキーファイルの設定で、iniの説明では、省略時にはセッションの設定を使うとあるが、セッションの設定で設定していても設定が必要。
例:PuTTYで既に、test と言うセッション名で設定が出来ていているものとして。
[SSH] ; SSHサーバーアドレス Host=test ; プライベートキーファイル PrivateKey=test.ppk [FORWARD] ; NetBIOSセッション・サービス 01=L169.254.0.1:139:192.168.0.2:139 ; ダイレクト・ホスティングSMBサービス 02=L169.254.0.1:445:192.168.0.2:445 ; リモートディスクトップ ; ※もっとも接続時にポート番号を設定できる ;03=L169.254.0.1:3389:192.168.0.2:3389
TeraTerm の設定
結論から言うと出来ない。(やり方があったら教えて)
設定 - SSH転送 で「SSHポート転送」のダイアログを開く。「追加」ボタンを押下し入力ダイアログで以下を入力する。
- ローカルポートを選択(チェック)
- ローカルポートに「169.254.0.1:139」
- リモート側ホストに「192.168.0.2」
- (リモート側)ポートに「139」
なんだけど、ローカルポートの欄に入れると「169.254.0.1:」までしか入らない…。
ちなみに、コマンドラインオプションでも転送の設定が出来るので
/ssh-L169.254.0.1:139:192.168.0.2:139
とやってみるけどうまくいかない。
v4.58 ではエラーになって起動しない。v4.59 はエラーにはならないが転送されていない。v2.3 は試してない(古いし)。
Poderosa (SSH PortForwarding Gateway) の設定
使ってないからよくわからない。「出来ない」と言うのと「出来た」と言うの両方見かけるけど…。
Poderosa 付属の SSH PortForwarding Gateway を使用する。
- SSHサーバ、SSHポート、アカウント、認証方法 は他の転送と同じ
- ローカルでlistenするポート:169.254.0.1:139
- 転送先ホスト:192.168.0.2
- 転送先ポート:139
- オプションの「Loopbackアドレスからの接続のみ許可」は“チェックしない”
Cygwin OpenSSH と PortForwarder の設定
それぞれの設定ファイルに以下の転送の設定を追加する(すればいいらしい)。
LocalForward 169.254.0.1:139 192.168.0.2:139
覚え書きメモ
ループバックアドレス
ループバックアドレス[3]と言うのもあり、127.0.0.1 は自分自身に割り当てられている。
2000では、アダプタを追加しなくても 127.0.0.2 などを利用できるらしい。XPは自身になってしまうためダメ。
参考ページ
- SMB over SSH (かえでのWebログ)
- SSH のポート転送を用いて Samba にアクセスする (Grid Datafarm)
- SMB over SSH by Poderosa (Myrmecoleon in Paradoxical Library. はてな新館)
- http://d.hatena.ne.jp/myrmecoleon/20070503/1178184816
- Poderosaでの設定。
- SMB over SSH (受容野)
- http://gaso.jpn.org/receptive-field/html/smb_over_ssh/index.html
- Vistaでの設定。スクリーンショットあり。
最終更新時間:2008年11月14日 17時22分00秒 指摘や意見などあればSandBoxのBBSへ。