本日も乙

ただの自己満足な備忘録。

公開鍵認証でSSH接続する

さくらVPSは、デフォルトでパスワードによる認証でSSH接続していた。 そのままでも良いが、パスワードが漏れた場合誰でもサーバにログインできてしまうという問題がある。 ましてや、sudo権限を持ったユーザだとサーバの設定も変えることができてしまうので大問題である。 なので、より強力な認証方法として公開鍵認証でSSH接続してみる。 公開鍵認証方式は、公開鍵と秘密鍵を作成する。 公開鍵をサーバ上、秘密鍵は自分のローカルPCに置き、ログインの際にこの2つの鍵を照らし合わせる(復号)することで認証が取れるようになる。 この方式なら、パスワードが漏れたとしても秘密鍵が無いとサーバにログインできないので比較的安心だ。 では、設定の方法を見てみる。

  1. 公開鍵と秘密鍵を作成する
  2. 自分のホームディレクトリ内に、.ssh ディレクトリがあるかを確認する。 確認方法は ls -la でできる。-a オプションが無いと、隠しディレクトリ(.付きディレクトリ)が見れないので注意。 .ssh ディレクトリが無ければ、mkdirコマンドで作成する。 さらに、.ssh ディレクトリは自分以外のユーザからアクセスできないようにchmod コマンドでパーミッションを変更しておく。
    $ cd ~
    $ mkdir .ssh
    $ chmod 700 .ssh
    
    ssh-keygen コマンドで公開鍵と秘密鍵を作成する。
    $ ssh-keygen -N "" -t rsa -b 2048 -C "hogehoge"
    
    Generating public/private dsa key pair.
    Enter file in which to save the key (/home/hoge/.ssh/id_dsa): (Enterキー)
    
    • -N オプションはパスフレーズを指定できるのでここではパスフレーズを無しにする。 本当はパスフレーズがあったほうがセキュリティ的によろしいのだが、ログインの度にパスフレーズを打ち込むのが面倒なのでここでは指定しない
    • -t オプションは鍵の種類を選択できる。rsa, dsaなどがあるが、ここではrsaを指定する
    • -b オプションは作成する鍵のbit数を指定できる。
    • -C オプションは公開鍵にコメントを残せる。作成した公開鍵が後で分かるように指定しておくと良い
    ssh-keygen コマンドを実行すると /home/hoge/.ssh/ 以下に以下のファイルが作成される。 秘密鍵(id_rsa) をWinSCP等でローカル環境に移した後、サーバ上の秘密鍵を削除しておく。
  3. 公開鍵をサーバ側に登録する
  4. 作成した公開鍵はそのままだとサーバ側で認識できないので、authorized_keys というファイルに登録する。
    $ cd ~/.ssh
    $ touch authorized_keys  # authroized_keys ファイルが無い場合のみ
    $ chmod 600 authorized_keys  # authroized_keys ファイルが無い場合のみ
    $ cat id_rsa.pub >> authorized_keys
    $ rm id_rsa.pub
    
  5. sshd_condigで公開鍵認証方式に変更する
  6. /etc/ssh/sshd_config を編集し、パスワード認証から公開鍵認証に変更する。
    $ cd /etc/ssh
    $ sudo vim sshd_config
    
    # 公開鍵認証をOKにする
    # #コメントを外すだけ
    #PubkeyAuthentication yes
    PubkeyAuthentication yes
    
    # パスワード認証をNGにする
    # no ⇒ yes に変更する
    #PasswordAuthentication yes
    PasswordAuthentication no
    
    sshd を再起動する
    $ sudo /etc/init.d/sshd restart
    sshd を停止中:                                             [  OK  ]
    sshd を起動中:                                             [  OK  ]
    
  7. ログインしてみる
  8. ターミナルをもう一つ起動して、公開鍵認証でログインできるか試してみる。 現在接続しているSSH接続を切断してしまうと、万が一SSHログインできなくなってしまうと二度とログインできなくなってしまうので注意。