【鍵なしは】ssh接続を認証鍵方式にしてみた【シャットアウト】

key

VPSにログインする時、今まで頑なに認証鍵方式を導入せずにパスワードでログインしていたんだけど、やっぱりセキュリティ的にちょいと不安なので導入してみた。

キーが無ければログイン出来ないってのはやっぱり安心だよね。

※注意

下記設定を終了してから行なって下さい。

VPSセキュリティ設定

【さくら】VPSサーバーのパフォーマンスを向上させる。【DTI】

【セキュリティ】sshでのrootログインを禁止する【乗っ取り対策】

認証鍵方式とは

読んで字のごとく、サーバーにログインするための鍵が必要になるログイン方式。

キーを持っている端末じゃないと一切ログイン出来なくなる。

恐ろしいほどセキュリティが強固になるが、逆に言うと鍵をなくすとログイン出来なくなるので注意が必要。

認証鍵を作る

とりあえず鍵を作らないと始まらない。

認証鍵を作る。

Macの場合

ターミナルを起動する。

起動したら下記コマンドを入力。

$ ssh-keygen エンターキー

するとどこに鍵を作るか聞かれるので、そのままエンターを返す。

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/ユーザー名/.ssh/id_rsa): エンターキー

パスワードを聞かれるので、パスワードを返す。

Enter passphrase (empty for no passphrase): パスワードを入力

2度聞かれるので同じパスワードを返す。

これで鍵は作成された。

Finderを開いてCommand+Shift+Gを押し、フォルダの場所を入力:に

~/.ssh

と入力し、.sshフォルダに移動。

key

.sshフォルダは隠しフォルダのため、通常の設定だと見ることが出来ないのでこういう移動をする。

.sshフォルダを開いたら、フォルダ内のid_rsa.pub(公開鍵)をテキストエディタで開く。

key-1

中のテキストをコピーする。

Windows(TeraTerm)の場合

TeraTermを開き、設定→SSH鍵生成(N)…をクリック。

key

生成(G)をクリックし、鍵を作ったら鍵のパスフレーズ:とパスフレーズの確認:に同一のパスワードを入力し、公開鍵の保存、秘密鍵の保存をクリックして鍵を保存する。

鍵を保存する場所を聞かれるが、今回はドキュメント上に保存。

key

ドキュメントフォルダ内にあるid_rsa.pub(公開鍵)をテキストエディタで開き、中のテキストをコピーする。

VPSでの設定

公開鍵用ディレクトリの作成

ログインしてもrootにならず、まずディレクトリの作成。

[kuzunoha@ ~]$ mkdir .ssh エンターキー

ディレクトリ.sshが作成された。

公開鍵の作成

先ほど生成した公開鍵をVPSにコピーする。

[kuzunoha@ ~]$ vi ~/.ssh/authorized_keys エンターキー

まっさらなファイルが開くので、コピーした公開鍵のテキストをペーストする。

貼り付けたら:wqで保存。

必ず間違い無くコピーされているか確認すること!

間違っているとログイン出来ず、悲惨なことになる。

権限をrootに変更

【セキュリティ】sshでのrootログインを禁止する【乗っ取り対策】

での設定によりsshでのrootログインを禁止したので、スーパーユーザー(root)に権限を昇格させる。

[kuzunoha(ユーザー名)@ ~]$ su エンターキー

rootバスワードを入力する。

[root@ kuzunoha]#

になればrootに変更された。

カレントディレクトリに移動。

[root@ kuzunoha]# cd エンターキー

カレントディレクトリに移動し、rootでログインした時と同じ

[root@ ~]#

になる。

パーミッションの変更

さっき作ったディレクトリと公開鍵のパーミッションを変更する。

[root@ ~]# chmod 700 /home/ユーザー名/.ssh/  エンターキー

[root@ ~]# chmod 600 /home/ユーザー名/.ssh/authorized_keys エンターキー

これでパーミッションは変更された。

sshdの編集

sshdを認証鍵に対応させる。

[root@ ~]# vim /etc/ssh/sshd_config エンターキー

42行目あたり

#PermitRootLogin no

#を削除し、

PermitRootLogin no

に変更。

47行目あたり

#RSAAuthentication yes

#を削除し、

RSAAuthentication yes

に変更。

48行目あたり

#PubkeyAuthentication yes

#を削除し、

PubkeyAuthentication yes

に変更。

49行目あたり

#AuthorizedKeysFile .ssh/authorized_keys

#を削除し、

AuthorizedKeysFile .ssh/authorized_keys

に変更。

64行目あたり

#PasswordAuthentication yes

#を削除してyesをnoに変更し

PasswordAuthentication no

に変更。

65行目あたり

#PermitEmptyPasswords no

#を削除し、

PermitEmptyPasswords no

に変更。

96行目あたり

#UsePAM no

#を削除し、

UsePAM no

に変更。

97行目あたり

UsePAM yes

に#をつけてコメントアウトし、

#UsePAM yes

に変更。

すべて変更したら:wqで保存。

sshdの再起動

変更を適用するため、sshdを再起動する。

[root@ ~]# service sshd restart エンターキー

エラーも出ず再起動すればVPSの設定は終了。

まだターミナルのセッションは閉じず維持しておく事!

ログインしてみよう

Macの場合

コンソールでログインする場合は、いつもどおりログインする。

$ ssh -p 10022 ユーザー名@IPアドレス エンターキー

Moshの場合、キーの場所をConfigに書き入れる必要がある。

$ vi ~/.ssh/config エンターキー

開いたら下記のようにIdentityFile ~/.ssh/id_rsaを書き足す。

Host vps
HostName VPSのIPアドレス又はドメイン名
User VPSログインユーザー名
Port 10022
IdentityFile ~/.ssh/id_rsa

パスフレーズを聞かれるので、キーを作った時のパスワードを入力してログインする。

うまくログインできたら成功。

出来なかったら再度見直す。

そのために設定終了後も修正できるよう、セッションを閉じていない。

Windowsの場合

TeraTermでログインする時に、パスフレーズは認証鍵を作った時のパスワードを入力し、RSA/DSA鍵を使うにチェックを付け、秘密鍵の場所を指定する。

ドキュメントフォルダに保存していれば、秘密鍵(k):ボタンを押せば一発で出てくると思う。

key

ログイン出来れば成功。

短いパスワードの人はやっておいたほうがいい

VPSは常日頃から攻撃されているので、しょぼいパスワードにしているとクラックされる。

そんなことをされたら個人情報をたっぷり抜き取られるので、パスワードを長くするか、認証鍵方式でのログインをおすすめする。

でも、鍵は無くさないようにSDカードにでも保存して大事な物入れにでも入れておこう。

秘密鍵を別のMacでも使う場合は、認証鍵id_rsaを別のMacの~/.ssh/にコピーした後、

$ chmod 600 ~/.ssh/id_rsa エンターキー

を行なってパーミッションの変更するのを忘れずに。

しないとログイン出来ない。

【鍵なしは】ssh接続を認証鍵方式にしてみた【シャットアウト】」への11件のフィードバック

  1. TS

    お世話様です。
    現在DTIのVPSで使っております。
    くずのは様の
    「VPSパフォーマンス向上」
    「rootログイン禁止」
    「認証鍵方式」
    すべて上手くいった様なのですがsshd再起動のコマンドだけは何故か以下のエラーが出てしまいます。

    bash: service: command not found

    su化(root昇格)してもカレントディレクトリに移動しても同じです。
    「rootログイン禁止」のところで一旦一般ユーザをexitしrootにて直接ログインすると記事通り2つのOKが出ました…。
    「認証鍵方式」のところではそのまま放置していますがターミナルからリモート接続しようとするとMacのホップアップPass入力要請→ターミナルにてユーザPass入力要請となり問題なくログイン出来ております。
    とりあえずログイン出来ているとゆう事は大丈夫と思っていても構いませんかね…。
    ちなみに私のOSバージョンは10.6.8です。
    よろしくお願い申し上げます。

    返信
    1. 葛葉 キョウジ(管理人) 投稿作成者

      多分大丈夫じゃないです。
      認証鍵方式のログインになると、
      ターミナルに接続→鍵へのアクセスパスワード入力→VPSサーバーに接続と言う流れになるので、
      ターミナルでのパスワード入力はなくなります。

      DTIのVPSはserviceコマンド使えないのかな?
      /etc/rc.d/init.d/sshd restart
      で再起動しないですかね。

      返信
  2. TS

    ありがとうございます。
    レス記述のコマンドで無事再起動致しました。
    お手数おかけして申し訳ございません。

    その後、パスのキーチェーン登録ですんなりログインに至ったのには驚きました。w

    返信
    1. 葛葉 キョウジ(管理人) 投稿作成者

      キーチェーン登録しちゃうとVPSのパスワード入力がなくなるので、
      自分しか使わない端末であればいいですけど、
      モバイル機だとキーチェーン登録はやめたほうがいいかもしれませんね。

      返信
  3. きんちゃん

    お世話になります。きんちゃんです。
    いくつか気づいた点を述べさせて頂きます。

    (1)

    root (権限)になってから、

    [root@ ~]# chmod 700 /home/ユーザー名/.ssh/  エンターキー
    [root@ ~]# chmod 600 /home/ユーザー名/.ssh/authorized_keys エンターキー

    されていますが、.ssh や .ssh/authorized_keys を作ったのは
    ホームディレクトリですから、ユーザー自身でも

    $ chmod 700 ~/.ssh
    $ chmod 600 ~/.ssh/authorized_keys

    と出来ます。root でやられたのは何か意図が有るのでしょうか?

    (2)

    公開鍵認証での接続設定が終了したら、今までのパスワード認証ログイン手続きでは
    ログインできないことを必ずチェックしておくのが良いでしょう。

    なお、sshd_config の編集において

    UsePam Yes

    として、接続ユーザーの制限などの設定をした場合に

    PasswordAuthentication no

    はしたけど、

    ChallengeResponseAuthentication no

    を忘れると、パスワード認証ログインが以前と同様に出来てしまうというのが、
    公開鍵認証を設定時の定番ミスです。
    今回の

    UsePam No

    設定では不要ですが、

    ChallengeResponseAuthentication no

    としておくのは転ばぬ先の杖になるかもしれません。

    (3)

    今まで使っていた、パスワード認証ログインで使っていたパスワードと
    今回の公開鍵認証で使用するパスワードを区別するためにパスフレーズという名称が使われていますので意識して使い分けるのがベターと思います。
    また、内容を同じものにしても動作に支障はないのですが、意識を持って使用するために、また、セキュリティ向上にも寄与すると思いますので、パスワードとパスフレーズは別の物を設定されるのがより良いでしょう。
    何が言いたいかというと、パスワードとパスフレーズをきちんと区別しましょうって事です。

    (4)

    秘密鍵を無くす、パスフレーズを忘れてしまった他、どうしようも無くなった場合は、
    さくら VPS でしたら、コントロールパネルからリモートログインして復旧を試みることが出来る
    旨の記述もあっても良いかなと思いました。
    DTI さんや KDDI、お名前などの VPS ではリモートログインがどうなっているのか知りません。

    ちなみに、秘密鍵のパスフレーズをクラックする方法があります。
    かなり大雑把ですが、Core i7 のPCを使って秘密鍵のパスフレーズ解析すると。。。。。

    5文字 1時間以内
    7文字 1日以内
    8文字 1ヶ月以内
    9文字 一桁年単位
    10文字 100年以上

    程度でクラック出来ます。
    というわけで、秘密鍵を盗まれる事が前提ですが、万一それが起こった場合、上のデータから、7文字以内のパスフレーズは気休め程度にしかならないことは覚えておいて良いかもしれません。
    さて、あなたのパスフレーズは何文字ですか?:-)

    ではでは

    返信
    1. 葛葉 キョウジ(管理人) 投稿作成者

      絶対パスを指定しているのは、
      当ブログの読者はVPSの初心者も多いので、
      実際の場所を視覚的に理解してもらうためです。
      一般ユーザーでログインする場所がどこなのかわかるようにってことで。
      なのでrootでアクセス権を変更している事自体は特に意味はないです。

      ChallengeResponseAuthentication no
      は別にいいかなと思ったんですけど、やっておくと安心ですね。
      入れておきます。

      パスワードは16文字にしてたんですけど、それなら自分が死ぬまでは破られそうにないですねw

      返信
      1. 葛葉 キョウジ(管理人) 投稿作成者

        変更しようと思ったらさくらはデフォでChallengeResponseAuthentication noになってました。

        返信
        1. きんちゃん

          くずのは様、お疲れ様です。

          16文字とは、完璧ですね。私より多いです。:-)

          で、仮に、ムーアの法則が正しいとすると、5年で10倍、20年で1万倍、40年で、1億倍 程度となり、集積度と計算速度が1対1で比例するなら40年後には現在の1億倍の速度で計算できるわけで、、めちゃくちゃ大雑把ですが、10文字パスフレーズ解析は1分程度で可能。でも、16文字だと、やっぱり10万年くらいはかかります。
          くずのは様が、あと80年生きられると、1億の2乗(単位が分かりません orz)倍となりますので、、16文字でも有意な時間内にクラックできるようになるかもしれません。:-)

          ではでは

          返信
          1. 葛葉 キョウジ(管理人) 投稿作成者

            普段、流失してもいいパスワード1と、ある程度重要なところに使うパスワード2を使っています。
            で、その二つは8文字なんですけど、最重要なところにはそれを2つつなげて使っていますw
            なので、長くても忘れることはありませんw

            クラックよりもiPhoneおっことすほうが怖いです(;´Д`)w

  4. 通りすがり

    自分のパスワード構成について詳しく書かないほうがいいんじゃないかなぁ、と。

    返信
    1. 葛葉 キョウジ(管理人) 投稿作成者

      ご心配ありがとうございます。
      ダミーなので大丈夫です。
      今は1Passwordで生成したパスワードにしています。

      返信

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)