ubuntu at u-aizu

SSHを使ってパスワードなしで接続

SSH (Secure Shell)を使ってリモートホストに接続する場合、いちいちパスワードを入れるのは面倒でもあり、また打ち間違いや漏洩の危険も増える。そこで、証明書を使って接続する方法を導入すると便利である。
このためには、次のような手順を踏むことになる。以下は端末で行った方がよいので、あらかじめGNOME端末を立ち上げておく。

  1. まず、自分の端末側で、秘密鍵と公開鍵を作成する。
    最初に、ディレクトリ .ssh を作成する。このディレクトリは自分だけが読み書きできるようになっている必要がある。
    mkdir .ssh chmod 700 .ssh
    続いて、鍵を作成する。
    最初に "Enter which ..." と聞かれている部分は、デフォルトであればそのままリターンでよい。
    次にパスフレーズを入力する。このパスフレーズはできるだけ長い方がよい。
    "-t dsa" を省略すると、RSA形式で鍵を作る。
    test1:~> ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/test/.ssh/id_dsa): (入力) Enter passphrase (empty for no passphrase): (入力) Enter same passphrase again: Your identification has been saved in /home/test/.ssh/id_dsa. Your public key has been saved in /home/test/.ssh/id_dsa.pub. The key fingerprint is: 62:5c:dd:43:15:aa:13:47:d9:f8:f2:ce:14:ba:3a:75 test@test1
    ここで、.sshというディレクトリの下に id_dsa というファイルと id_dsa.pub の2つのファイルができる。前者が秘密鍵、後者が公開鍵である。

  2. 公開鍵である id_dsa.pub を、リモートログインしたい端末へ転送する。フロッピーディスクやUSBメモリ経由でもよいし、FTPやscpなどを使ってもよい。

  3. サーバへリモートログインする。先ほどのid_dsa.pubが転送されていることを確認したあと、まずサーバ側にも .ssh ディレクトリを作成する。こちらも、パーミッションは700とする。
    server1:~> mkdir .ssh server1:~> chmod 700 .ssh


  4. id_dsa.pubファイルを、authorized_keysというファイルに加える。
    server1:~> cd .ssh server1:~> cat ~/id_dsa.pub >> authorized_keys server1:~> chmod 600 authorized_keys
    なお、authorized_keysは、authorized_keys2という名前になる場合がある。
    また、同時に、ホームディレクトリが、本人にのみ読み書き・アクセス可能(700)になっていることを確認する。

  5. サーバ側では、証明書でのログインを許す設定を /etc/ssh/sshd_config ファイル(またはsshdの設定ファイル)に加える。あるいは、既にyesとなっていることを確認し、もしなっていないようであればyesに変更し、sshを再起動する。
    PubkeyAuthentication yes


  6. 以上で準備は完了である。サーバからログアウトし、改めてsshでログインする。
    最初の1回は、次のような表示が出て、鍵を作るときに入力したパスフレーズの入力が要求される。慌てずにゆっくり、確実に入力する。
    パスフレーズの入力要求画面


  7. 正常にアクセスできることを確認する。次回以降のログインでは、パスワードを入力することなくアクセスができるはずである。それが確認出来れば、パスワード入力を禁止してしまってもよい。改めてサーバ側の /etc/ssh/sshd_config を以下のように変更する。
    PasswordAuthentication no
    変更したらsshを再起動する。
    server1:~> service ssh restart


トップへ戻る