Dec 24, 2011

CIFS over SSH, Windows7 ssh経由でファイル共有アクセス

■はじめに
 Windowsファイルサーバに、SSH経由で(CIFS、port 445/tcp で)アクセスする。

 WebDAVで試行錯誤したが失敗した。
 一方、CIFSでは、下記参考サイトの通りに設定・実施すれば、Windows7でアクセス可能。Vistaでも出来るらしい。誰かの一助になれば、と日本語訳(意訳)します。

■参考
 Mounting your Nikhef home directory using SSH for Windows Vista/7
 注) このサイトのWindows挿絵は、とても参考になります。
  私の記事と併せて確認しながら進めると、良いでしょう。
 
■訳(意訳)
 Windows シェア over ssh のために必要なこと
 ・Administrator権限での ローカルPCアクセス。
 ・PuTTY v0.58以上 (SSH付きのもの)
 ・Client for MS Networkドライバにバインドされたネットワークアダプタ
 ・Client for MS Networkドライバにバインドされていないネットワークアダプタ
 ※ Vista以降では、旧来の(XPと それ以前の) SMBドライバとは ちょっと違います。

・進め方、概要
 1. マイクロソフト ループバック アダプタ をインストールします。
 2. 同アダプタを 的確に設定します。
 3. Windowsシステムドライバを微調整します。
 4. Windows タスク スケジューラーで、或るタスクを作成します。
 5. Windowsをリブートして、ここまでの設定変更が有効か、確認します。
 6. PuTTYを 適切に ポート転送するよう、設定します。
 7. 最後に、PuTTYを ファイルサーバにマウントします。
 8. 以上を すべて取りやめたい場合の手順を示します。

・以降、詳細--------------------------

1. Microsoft Loopback Adapter のインストール
 ・ハードウェアウィザードの開始
  (スタート、設定、コントロールパネル、ハードウェアの追加)
  (訳注、システム管理者のコマンド プロンプトから、Hdwwiz.exe を実行するのが良い)

 ・「次へ」をクリック
 ・「一覧から選択したハードウェアをインストールする」を選択して、「次へ」
 ・「ネットワークアダプター」を選択して「次へ」
 ・製造元一覧から、「Microsoft」選択し、「Microsoft Loopback Adapter」を選択して「次へ」
 ・「新しいハードウェアのインストールを開始するには、「次へ」をくりっくしてください」と
  表示される。「次へ」
 ・しばらく経ってから、「完了」する。
 Windowsは要求しないが、ここでリブートする。(おーい、Microsfot OSだからね ;-))

2. ループバックアダプタの設定
 ・ネットワークと共有センターへ
  (訳注、コントロール パネル\ネットワークとインターネット\ネットワークと共有センター へ)
 ・ループバックアダプタを選択
 ・プロパティーで、以下、確実に設定の事。
  ○ Microsoft ネットワーク用クライアントの チェックを外す。
  ○ Microsoft ネットワーク用ファイルとプリンター共有の チェックを外す。
  ○ インターネットプロトコル (TCP/IP)のチェックを設定。
   (訳注、2011.12現在では、IPv4だけで良いだろう)
 ・「インターネットプロトコル バージョン4 (TCP/IPv4)」を選択し、「プロパティ」をクリック
 ・新しいWindowsが表示される。
  IPアドレスを 10.255.255.1 
  サブネットマスク 255.255.255.0
   (訳注、サブネットマスクは 255.255.255.252などとして絞るとベター)
  デフォルト ゲートウェイは、空欄で良い。
  「次のdnsサーバーのアドレスを使う」とした上で、dns serverは空欄で良い。
 ・「詳細設定」を選択
   先ほど設定した内容が反映されているか、チェック
  「自動メトリック」のチェックを外し、インターフェイスメトリックに 9999を設定。
 ・WINSタブをクリック
  「LMHOSTSの参照を有効にする」のチェックを外す
  「NetBIOS over TCP/IPを無効にする」を選択。
  「OK」を選択。
  TCP/IPプロパティーのWindowsを閉じる。

3. SMBドライバを微調整
 Windows Vista / Windows 7は、起動したとき、システムのSMBドライバが、
 port 445をすべてのインターフェイスで占有してしまっています。
 そこで、SMBドライバのスタートアップを遅らせます。
 
 ・概要
  ・システム管理者権限で、cmd.exeを起動します。
  ・SMBドライバの自動開始を 次のコマンドで 不可に設定します。
    sc config smb start= demand
    (「=」の後のスペース必須)
  ・portproxyルールを設定します。
    netsh interface portproxy add v4tov4 listenaddress=10.255.255.1 listenport=445
          connectaddress=10.255.255.1 connectport=44445
    (以上、一行で)
     
   ○ Listen Addressは、上記で設定したループバックアダプタのアドレス。
   ○ connectaddressは、listenaddressと同一であること。
   ○ listenaddressとして 127.0.0.1は失敗する。本当だから信じてね。

   以上を次のように確認する。
    c:\>netsh interface portporxy show v4tov4
      c:\>netsh interface portporxy show v4tov4
      Address          Port    Adress           Port
      ---------------- ------- ---------------- -------
         10.255.255.1     445     10.255.255.1     44445

4. Windows タスク スケジューラーで、SMBドライバの開始タスクを作成します。
  ・タスクスケジューラーを起動
   (訳注、コンパネで、scheduleとして検索すると「タスクのスケジュール」が見つかる)
  ・「基本タスクの作成」を選択すると、新しいWindowが表示される。
  ・タスクの「名前」を Start SMB driverとでも入力し、「次へ」
  ・「ログオン時」を選択して、「次へ」
  ・「プログラムの開始」を選択して、「次へ」
  ・"プログラムの開始"に、 C:\Windows\System32\Net.exe
   "引数の追加"に start smb
   「次へ」
  ・『「完了」をくりっくしたときに、このタスクの[プロパティ]ダイアログを開く』をチェック。
   して、「完了」
  ・タスクプロパティWindowで、「ユーザがログオンしているかどうかにかかわらず実行する」
   を選び、「パスワードを保存しない」にチェックし、
   「最上位の特権で実行する」をチェックして、
   「トリガー」タブへ
  ・「編集」をクリックし、
   「任意のユーザ」をチェックして、「OK」し、「条件」タブへ
  ・「条件」Windowで、「コンピュータをAC電源で使用している場合のみタスクを開始する」の
   チェックを外して、「OK」
  
5. Windowsをリブートして、ここまでの設定変更が有効か、確認します。
  ・今やSMBドライバー開始を不可能に設定したわけだが、
   まずはリブートする。
  ・Windowsの起動・ログイン後、次のコマンド実行し、SMBドライバの状態を確認する。
   c:\>sc query smb
   
   ※ RunningならOK
  ・portproxyの状態を確認
   c:\>netstat -an | find ":445"

   TCP  10.255.255.1:445   0.0.0.0:0   LISTENING ならOK

   0.0.0.0:445などがあれば、最初の「portproxyコマンド実行」が 成功していない。

6. PuTTYを 適切に ポート転送するよう、設定します。
  ・PuTTYを起動し、ターゲットSSHサーバにログインすべきssh設定を行う。  
   例、hostは、login2.nikhef.nl、プロトコルは ssh
  ・メニュー 接続→SSH、カテゴリーを拡げて トンネルを選択
  ・ポート転送の設定
   ○ source portは、ループバックアダプタのアドレス(訳注 10.255.255.1)、
     port 44445 (445以外)を設定追加、
     (表示可能域は狭く、一部しか見えないが、大丈夫)
   ○ デスティネーションサーバと、port 445/tcpを設定し、
     (訳注、例 internal-fileserver.yourdomain.com:445  など)
     「追加」する。     
     (訳注、
      L 10.255.255.1:44445 internal-fileserver.yourdomain.com:445 が
      見えるはず)

7. 最後に、PuTTYで ファイルサーバにマウントします。
  PuTTYを開始。
  ・ターゲットSSHサーバ(訳注、external-sshd.yourdomain.comなど)にsshログイン
  ・PuTTYのEvent logにて、ポート転送が正しく機能しているか、確認する。
   PuTTYのメニューから Event Logを選択する。
   "Locla IPv4 port 10.255.255.1:44445 forwarding to internal-fileserver.yourdomain.com:445"
   などと表示されていればOK。
   (訳注、telnetを導入して、PCで、telnet 10.255.255.1 445 とし、
     あわせて、sshサーバで tcpdumpして、ポート転送が意図通り稼動しているか、
     確認すると良い)

  ・「スタート」、「Run」とし、file://10.255.255.1/share-name とすると、
   User nameと、Paswordを入力すればOK のはず。

   User nameは ドメイン名\ユーザ名
   
  ・Windows Explorer で ファイルサーバの中身の読み書きが可能になるはず。

  ・ネットワークドライブのマッピングも
    Windows Explorerで、「ツール」→「ネットワークドライブのマッピング」
   で ドライブ Z:  フォルダ file://10.255.255.1/share-name で可能に。
   ○ 選択可能な ドライブ文字を選ぶこと。
   ○ 「ブラウズ(表示)」ボタンを押さず、ちゃんと file://10.255.255.1/share-name をタイプインすること。
   ○ 「完了」を押さず、「別のユーザ名」を押すこと。

  ・「~として接続」のポップアップWindowにて
   ・User nameとして ドメイン名\ユーザ名
    と、パスワード 
    を入力

8. 以上を すべて取りやめたい場合の手順を示します。
 (1) システム管理者権限で、コマンドプロンプトを表示
 (2) c:\>sc config smb start= auto
 (3) c:\>netsh interface portproxy delete v4tov4 listenaddress=10.255.255.1 listenport=445
 (4) c:\>devmgmt .msc とタイプし、デバイスマネージャを起動する
 (5) タスクスケジューラで「管理タスク」から Start SMB driverタスクを削除する

//

No comments: