公開鍵認証による SSH ログイン

セキュリティ強化のため、全学計算機システムの Linux サーバについて、学外からの SSH ログインは公開鍵認証によるもの以外は拒否するようになっています。ホームディレクトリに公開鍵を置いていないと、学外からは SSH ログインができません。

ホームディレクトリに鍵を置くには、サテライト室など学内からログインして作業する方法と、リモートデスクトップを使う方法があります。

仕組み

公開鍵認証は、公開鍵と秘密鍵のペアをあらかじめ作った上で、公開鍵はサーバ側に置き、秘密鍵はクライアント (ノート PC 等) 側に保管します。秘密鍵を持っている人でないと、ログインできない寸法です。

秘密鍵は、人間が入力できるパスワードに比べるととても長く、パスワード類推等によるサーバへの総当たり攻撃に対して強固になっています。また、正確には秘密鍵そのものがネットワーク上に送られることもなく、秘密鍵を持っているクライアントだけが答えられるなぞなぞをサーバが出すことによって認証を行うことも、安全性に貢献しています。

準備

キーペア(公開鍵、秘密鍵)の作成

  • Windows で作成する
    以下のページの情報を参考に、PuTTYgen というツールを使って公開鍵、秘密鍵を作成します。

    注意: 公開鍵は [Save public key] ボタンで保存ではなく、[Public key for pasting into OpenSSH authorized_keys file] 欄に表示されている公開鍵をコピーする方法で作成してください。

  • macOS または Linux で作成する
    OpenSSH に含まれる ssh-keygen というコマンドを使って公開鍵、秘密鍵を作成します。

    1. macOS の場合は、Finder を起動し、「アプリケーション」→「ユーティリティ」から「ターミナル」を起動します。
      Linux の場合はコンソールで作業するか、xterm 等のターミナルエミュレータを起動します。
    2. 以下のコマンドで、鍵を保存するディレクトリを作成します。
      $ mkdir -m 700 ~/.ssh
      

      ただし、既に .ssh ディレクトリが存在する場合は、新たに作成する必要はありません。

    3. 以下のコマンドで、公開鍵、秘密鍵を作成します。
      $ ssh-keygen -t rsa
      Generating public/private rsa key pair.
      Enter file in which to save the key (/ユーザホーム/.ssh/id_rsa):
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      

      Enter file… の部分では、作成する鍵のファイル名を入力するように求められますが、特に変更する必要がなければ何も入力せずにそのまま Enter キーを押します。
      その次にパスフレーズの入力が求められます。パスフレーズは忘れない程度で長めに設定することをお勧めします。また、実アカウントのパスワードとは別なので、同じものを絶対に指定しないようにしてください。入力後、最後に確認のためもう一度パスフレーズの入力が求められます。
      入力に問題がなければ、.ssh ディレクトリの下に公開鍵 (id_rsa.pub) と秘密鍵 (id_rsa) が作成されます。

    4. 念のため、秘密鍵 (id_rsa) は自分だけが読めるようにアクセス権 (パーミッション) を設定します。
      $ chmod 600 ~/.ssh/id_rsa
      

      秘密鍵 (id_rsa) はこのまま手元に保存しておき、公開鍵 (id_rsa.pub) はサーバ側に、 authorized_keys というファイル名にして設置します (次項参照)。

公開鍵のサーバへの転送

キーペアを作成したら、公開鍵をサーバに転送します。上記の「PuTTYgen での鍵生成と公開鍵のサーバへの転送」にも書いてありますが、要約すると次のような手順となります。

注意: 以下の手順は秘密鍵と公開鍵のペアをひとつだけ使う場合の手順です。以前に登録済みで既に authorized_keys ファイルが存在する場合は、新しい公開鍵を末尾に付け足してください。authorized_keys ファイルには複数の公開鍵を登録できます (1 つの鍵につき 1 行)。

  1. 公開鍵ファイルの名前を「authorized_keys」(拡張子なし) に変更しておきます。
  2. リモートアクセス経由で全学計算機システムの Windows デスクトップにリモート接続します。
  3. Z:ドライブの下に公開鍵の保存先ディレクトリ「.ssh」(ドット エス エス エイチ) がない場合は、以下の操作をします。
    • スタートボタンを右クリック → ファイル名を指定して実行 で現れる枠に「cmd」と入力します。
    • 以下のように入力します。
       Z:\> mkdir Z:\.ssh
  4. 作成しておいた公開鍵ファイル「authorized_keys」(拡張子なし) を .ssh ディレクトリの中にコピー (ファイル転送) します。
    • 注意:コピーするのは、公開鍵だけです。秘密鍵のコピーは不要です。

ログインのテストと初期設定

手元の端末で SSH クライアントを使って、ログインできるかどうかの確認と、初期設定を行います。ここでは Windows 上の TeraTerm、WinSCP で行う例、および、macOS や Linux 上の OpenSSH で行う例を紹介します。

なお、初回ログインの際は、サーバのホストキーがキャッシュされていないため、接続先のサーバを信用するかどうかの確認ダイアログが表示されます。その場合は、ダイアログに表示されている鍵のフィンガープリントとこちらのページの一番下にあるフィンガープリントを照合して、正しいサーバに接続しているかどうかを確認してください。

Tera Term でログイン (Windows)


WinSCP でログイン (Windows)


秘密鍵を指定した後、パスワードの欄はとりあえず空欄にして「ログイン」ボタンを押します。すると、後から秘密鍵のパスフレーズを求められるので、その時に PuTTYgen で作成したときに指定したパスフレーズを入力します。

OpenSSH でログイン (macOS, Linux)

次のコマンドでログインを試みます。

$ ssh icho.u.tsukuba.ac.jp -l ユーザ名 -i ~/.ssh/id_rsa

するとパスフレーズの入力を求められるので、鍵作成の時に設定したパスフレーズを入力します。

なお、クライアント側で ~/.ssh/config というファイルを作成して以下のような内容を記述しておくと、より簡単にログインできるようになります。

host icho
  hostname icho.u.tsukuba.ac.jp
  user ユーザ名
  IdentityFile ~/.ssh/id_rsa

例えばこの場合は、次のコマンドでログインできるようになります。

$ ssh icho