# SSH 接続

Tera Term の特徴とも言える SSH 接続について解説します。Tera Term は TTSSH プラグインを導入すると SSH 接続に対応します。

## 前提知識

SSH には SSH1、SSH2 の2種類のプロトコルがあります。SSH2 は SSH1 の上位互換ではないので注意が必要です。接続するホストに応じて適切に選択する必要があります。TTSSH は両方のバージョンに対応しています。

また、SSH の接続方法には

- パスワード認証
- 公開鍵（と秘密鍵のペアによる）認証
  - 認証エージェント Pageant を利用する
- SSH1 における rhosts 認証
- SSH1 における challenge/response(TIS) 認証
- SHS2 における keyboard-interactive 認証

があります。ここでは需要が多いと思われる認証方法について触れたいと思います。

## 接続の手順

Tera Term を起動すると、下図のようなダイアログによりログイン方法を選ぶことができます。

SSH で接続する場合、デフォルトから変更する箇所は「SSH version」です。接続先のサーバにあわせて選択してください。

接続すると、今度は認証方法を選択するダイアログが現れます。
デフォルト値を"TTSSH: Authentication Setup" ダイアログボックスで設定することができます。

TTSSH は複数の認証方法をサポートしていますが、明示的に一つの認証方法を選択する必要があります。一つの認証方法に失敗した場合、続けて別の種類の認証を試みることはありません。
たとえば OpenSSH クライアントではパスワード認証と keyboard-interactive 認証の見た目がそう変わらないためサーバの認証方式を意識せずにログインできますが、TTSSH はそうではありません。keyboard-interactive 認証と公開鍵認証をサポートしているサーバにパスワード認証でログインしようとしても必ず失敗します。

- パスワード認証を使用する場合は「Use plain password to log in」にチェックがついていることを確認し、ユーザ名とパスワードを入力します。これらが正しければ無事ログインできます。
  ※パスワード送信時の SSH パケットは暗号化されているので、TELNET のようにパスワードが平文で送信されることはありません。
- 公開鍵認証を用いる場合は、上から2番目の「Use RSA/DSA/ECDSA/ED25519 key to log in」にチェックをつけ、「Private key file:」ボタンを押して秘密キーのファイルを指定します。その後ユーザ名と秘密キーのパスフレーズを入力してログインします。
  ※OpenSSH 形式のほか、TTSSH 2.63(Tera Term 4.76) 以降では PuTTY 形式・SECSH(ssh.com) 形式の SSH2 秘密鍵に対応しています。
- keyboard-interactive認証を使用する場合は「Use keyboard-interactive to log in」にチェックをつけ、ユーザ名を入力します。
  サーバからのプロンプトと文字列を入力するダイアログが表示されるので、パスワードを入力します。
- Pageant を用いて認証する場合は「Use Pageant」にチェックをつけ、ユーザ名を入力します。

### ユーザー名入力

このダイアログが表示されたときに 設定によってあらかじめ ユーザー名が入力されます。

また、 ユーザー名が入力されていた時、または、ユーザー名を入力して入力欄からフォーカスが移動した時、 設定によってサーバーへアクセスします。

ユーザー名の入力欄の横のボタンを押すとオプションを選択できます。 ユーザー名が入力されていない場合は、tabキーでこのボタンにフォーカスが移動します。 ユーザー名が入力されている場合は、tabキーでパスワード / パスフレーズの入力欄に フォーカスが移動します。

Paste Windows usename
  Windowsのユーザー名を入力します。

### パスワード / パスフレーズ入力

パスワード / パスフレーズの入力欄は、通常のダイアログと違い以下のような動作となります。

- Control + A 〜 Z, [, \, ], ^, _ で制御文字 (0x01 - 0x1F) を入力できます。この動作がデフォルトです
- Control + V は SYN (0x16) の入力となりますので、貼り付けには利用できません。貼り付けを行うには Shift + Insert を使用してください。

入力欄の横のボタンを押すとオプションを選択できます。

Paste from clipboard
  クリップボードからパスフレーズをペーストします。
Paste from clipboard and clear clipboard
  クリップボードからパスフレーズをペーストしてクリップボードを空にします。
Use control charactors
  チェックが入っていると制御文字を入力することができますが、 Control + Vでクリップボードのペースト等の操作はできません。 チェックが入っていないと制御文字を入力できませんが、 Control + Vでクリップボードのペースト等の操作が可能です。
Show passphrase
  パスフレーズを表示するか、伏字にするか選択できます

## セキュリティ警告

### ssh_known_hosts ファイル

SSH 接続時には SSH サーバのホスト鍵をチェックし、一致する鍵が ssh_known_hosts にない場合には警告を表示します。
チェックの結果は以下のように分類されます。

- ssh_known_hosts に接続中のホストの鍵が一つも登録されていない
- ssh_known_hosts に接続中のホストの鍵が登録されているが、鍵の種類が違う
- ssh_known_hosts に接続中のホストの鍵が登録されており、鍵の種類が同じだが、同一の鍵ではない
- ssh_known_hosts に接続中のホストの鍵が登録されており、鍵の種類が同じで、同一の鍵である (警告は表示されない)

警告が表示された場合には、意図しないサーバに接続しているか中間者攻撃に遭っている可能性があります。
しかし、始めてサーバに接続するときや、サーバの再インストールなどにより SSH サーバのホスト鍵が変更された場合にもこの警告が表示されます。「警告ダイアログに表示されている、接続中の SSH サーバのホスト鍵の指紋」と「接続しようとしている SSH サーバのホスト鍵の正確な指紋」を比較してください。

OpenSSH の場合、サーバ管理者は以下のようなコマンドでサーバのホスト鍵の指紋を取得できます。

    ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

### SSHFP RR

SSH 接続時に、RFC 4255 に規定されている SSHFP RR (Secure SHell FingerPrint Resource Record) による検証が可能ですが、現在のTera Termでは DNSSEC 検証ができないので参考程度の位置づけとなります。

ドメインの所有者であれば DNS の SSHFP レコードに SSH サーバホスト鍵の指紋を登録することが可能です。クライアント(Tera Term)は SSHFP レコードを取得し、接続中のサーバホスト鍵と比較することで検証が可能です。
この機能は Windows リゾルバの制限により Windows 2000 以降でのみ有効です。

SSHFP に関して規定している RFC 4255 には「DNSSEC 認証されていない SSHFP RR を信頼してはならない」とあります。
Tera Term が利用している Windows リゾルバは DNSSEC の署名が検証ができないため、常に DNSSEC 検証に失敗します。

## キーの生成

ここで、公開鍵認証に用いる公開鍵・秘密鍵ペアの生成方法を説明します。鍵ファイルを生成するには [Setup] メニューから「SSH KeyGenerator...」を選択します。

選択すると、鍵の生成ダイアログが現れます。

「Key type」でキーの種類を選べますが、SSH1 プロトコルで使用する場合には「RSA1」を、SSH2 プロトコルで使用する場合には「RSA」「DSA」「ECDSA」「ED25519」を選択します。選択後、「Generate」ボタンを押すとパスフレーズの入力を催されますので、キーのパスフレーズ（パスワードのようなもの。ただし空白を含んでもいいし、一般にパスワードよりも長い物が指定可能）を入力します。入力した後は、「Save public key」ボタン、「Save private key」ボタンを押してキーを保存します。ファイル名は必要がなければデフォルトのままで構いません。保存が終わったら「Cancel」で終了します。

このキー・ファイルの使用方法ですが、デフォルトで保存した場合、拡張子が「pub」となっているファイル（「公開鍵」）の内容を、サーバの指定の場所に保管します。（一般的には (home dir)/.ssh/authorized_keys に内容を追加します。）また、拡張子が付いていないファイルは「秘密鍵」となり、ログイン時に指定する事となります。

注意：秘密鍵（private key）は第三者に絶対に知られてはいけないため、管理を厳重に行うようにしてください。また、誤ってサーバへ転送してしまわないようにしてください。