How to setting SSH(protocol 1) for Windows

by 木谷 公哉(kitani@bakkers.jp)
  1. はじめに
     
    WindowsではいくつかのソフトウェアがSSHに対応しています。そのなかで有名なものを説明します。なおsshサーバーは、Opensshとして説明します。


    SSH1 Teraterm Pro 2.3(日本語版) + TSSH 1.5.4
  2. 公開鍵/秘密鍵方式
     
    パスワード方式よりも暗号化強度は高いです。これは認証手続きにおいての強度の違いとなります。しかしながら鍵の保管をきちんとしなければなりません。まるたご屋ではある程度のレベルの方々の集まりなので、パスワード方式は利用不可にしています。つまり公開鍵/秘密鍵を利用しないといけません。 Teraterm Proの場合には、自身に鍵作成機能がありません。従って、別の所で一対の公開鍵、秘密鍵を作成しなければなりません(大抵はUNIXかcygwin等のツールを使うことになるでしょう。以下コマンドといえばログインしたいサーバー上で行っているものとします。)
    1. 注意点
       
      ホームディレクトリにSIDがついていないようにしてください。sshはセキュリティ上SIDがついている場合は機能してくれません。
    2. 鍵作成(以下はコマンドです)
      1. 鍵とパスフレーズ作成
          ssh-keygen -t rsa -b 1024
         
          保存場所を聞いてきますので、そのまま(/home/sites/home/users/ユーザ名/.ssh/id_rsa) Enterを押してください。またパスフレーズというパスワードを聞いてきます。パスフレーズは重要です、少なくても記号や数字を織り混ぜて考えてください。Teraterm+tsshはssh プロトコル1しかサポートしていないため、RSA暗号化をしています。もしPuttyのようなプロトコル2をサポートしているものを利用するのであれば、dsa暗号化を推奨します。とはいえ、Teratermの端末制御が非常に優れいているため、まだまだTeratermを使い続けるがためにプロトコル1を使っている方々が多いです。プロトコル2からサポートされたdsa暗号の方がrsaより強力です。

          chmod 700 $HOME/.ssh
          chmod 600 $HOME/.ssh/id_rsa
          chmod 600 $HOME/.ssh/id_rsa.pub

          として他のユーザに鍵を取られないような処置をしましょう。

      2. 公開鍵をサーバーに登録
          cd  $HOME/.ssh
          mv id_rsa.pub  hogehoge_rsa.pub
          cat hogehoge_rsa.pub >> authorized_key

          で登録されます。なお公開鍵は今後増える可能性があるので、デフォルトの名前からリネームしておきましょう。分かりやすいのがクライアントのコンピュータ名をつけておけばどこの公開鍵かが分かって便利だと思います。

      3. 秘密鍵をTeratermを使う端末へ取ってきます。
         絶対にこの秘密鍵は取られないようにしてください。FD辺りに保存するか、秘密鍵のアクセス権限を自分以外触れなくするかして死守してください。

  3. ソフトウェアのインストール方法
    1. TeratermProをインストールします。
    2. TeratermProをインストールしたフォルダにTTSSH1.5.4の中身を入れます。
    3. TeratermProをインストールしたフォルダに「ttssh.exe」というファイルができているはずなので、これをTeratermProの代りに以後使用します。デスクトップなどにショートカットを作成しておけば使用するのに楽になるでしょう。

  4. ソフトウェアの設定方法
    1. まずttssh.exeを起動してください。すると下の図のような画面がでてきます。ここで一度Cancelをしてください。
      Image of Teraterm with ssh


    2. Teraterm with SSH(ttssh)のファイルメニューからSetupを選択し、以下の表の用に設定してください。
      Setting of Teraterm with ssh


      Terminal Kanji項目が二つありますので、これをホストに合わせた漢字コードへ変更してください。CobaltなどではSJISで、その他の標準的なUNIXではEUCでしょう
      Keyboard Tersmit DEL byという項目の二つのチェックボックスをチェックしてください。これはDELやBackscapeを相手側のホストで使用するときに必要なものです。
      TCP/IP あらかじめ接続先のホストを登録しておく場所です。SSHを使用する場合は標準的に22番ポートとなっていますが、サーバー側でポート指定を変えている場合はちがうものにする必要があります。
      SSH Authentication SSHでの設定です。
      Password方式の場合には、「Use plain password to log in」
      公開鍵/秘密鍵方式の場合には「Use RSA key to log in」
      を指定してください。鍵方式の場合にはPrivateキー(秘密鍵)がどこかを指定してください。後はログイン名をあらかじめ入れておけば、入力の手間が省かれます。
      SSH Port Forwarding 任意のポートにたいしてSSHの暗号をかけることができます。具体例は後述するFTP項目を参照してください。
      Save setup 設定を保存します。上記の設定が終わったら必ず保存してください。
      Setting of Teraterm with ssh 2

  5. ソフトウェアの使用方法
  6. FTPに対してSSH暗号経路を使用する方法
    1. TTSSH設定の内SSH Port Forwarding設定を開きます。ここからADDボタンを押すと下図がでてきます。


    2. Local Portには適当なポートを入れてください。ここでは筆者の趣味的なものから11111にしています。通常は1024以上のポートで空いているものを使えばいいでしょう。
    3. Remote machineにはFTP先のホスト名いれてください。
    4. portにはftpもしくは21を指定してください。
    5. OKボタンを押して、TTSSH設定からSave Setupをして設定を保存してください。
  7. SSH暗号経路を使用するFTPソフト側の設定
    1. まずTTSSHのSSHでログインします。これでPort Forwardingは有効になります。
    2. FTPソフトを立ち上げます。
    3. FTPソフトの設定を以下のように変更します。
      接続先ホスト名 127.0.0.1
      拡張機能 PASVモードを使用にチェック(これをしないとファイルリストが所得できません)

      Firewallで守られている所へは通常ファイルリストが取れません。これはFTPが二つのポートを利用するからです。すなわちコントロールポートとデータポートです。コントロールポート(認証やコマンド等を渡す)は21と固定なのですが、データポートは以下のようにバラバラです。
        PASVモードON:  client: 20 ---> server: 1025〜65535
        PASVモードOFF: server: 20 ---> client: 1025〜65535
      となりPASVモードを使ってないとサーバーの20番ポートからクライアントの不特定多数のポートを許可せねばなりません。またNATとか導入してたら外部から直接ポート見ることができない点も問題です。 とはいえクライアントからサーバーへ不特定多数のポートを許可するのもかないません。 なのでサーバー側でPASV時に使用するポートを制限し、それらのポートへのアクセスを許可している必要があります。proftpdというFTPサーバーでは以下の設定を追加すればよいでしょう。

      # Allow SSH Port Forwarding
      AllowForeignAddress on
      # Static Passive Port
      PassivePorts 8021 8021

      ここでもポートを8021にしていますが、これも適当でいいです。

      そうしておいて、そのポートに対して特定のクライアントからの接続を許可すればよいでしょう。
      接続先ポート番号 11111
    4. この設定でFTPするとSSHが使用している22番ポート経由で21番ポートにたいしてアクセスしてくれるので、暗号化がかかるわけです。

      なおこのSSH Forwardingはコントロールポートしか守ってくれません。つまりデータはプレーンのままということです。可能ならばSSH2で利用できるSFTPがいいでしょう。SSH2で利用できるSFTPはデータポートも暗号化してくれます。