公開鍵を利用してリモートパソコンにSSHする

Pocket

ローカルのパソコンからリモートのLinux系のサーバへアクセスする際にSSH(Secure Shell)を使用してアクセスしていると思います。内部ネットワーク内であればそれほど気にしなくても良いですが、インターネットへ出たり、他の会社の方と共有しているネットワークにサーバがある場合は、パスワードの総当たり攻撃や辞書攻撃(ブルートフォースアタック)をされて情報が流出する危険性もあります。

今回はこのような場合に、ユーザーIDとパスワードだけでの認証ではなく、公開鍵暗号方式を用いたもう少しセキュリティに強い接続方法を紹介します。

まずは通常のSSHを使用してログインする方法と、今回行う公開鍵暗号方式でのSSHの方法の違いを説明します。

設定方法

接続元(ローカルのパソコンなど)で行う作業

まずは接続元の環境で接続元のOSの種類により、公開鍵と秘密鍵の生成方法が変わりますので、Linux系OSの場合はOpenSSH、Windows系OSの場合はTera TermとPuTTYでの鍵ファイルの生成方法を説明します。
※Windows系OSでOpenSSHをインストールして生成しても構いません。

Linux系OSの場合

OpenSSH付属のssh-keygenコマンドを使用して秘密鍵および公開鍵を作成します。

オプションは、以下のとおりです。

-t
鍵ファイルの種類を指定します。今回はRSAを使用します。
-b
鍵ファイルのビット長を指定します。2048以上を指定することをオススメします。
-C
コメントを指定します。公開鍵に含めることができ、公開鍵を使用する際の説明文などで使用されます。

コマンドを実行後、いくつか質問をされます。

Enter file in which to save the keyは、鍵ファイルの保存ディレクトリおよびファイル名を指定します。指定をしない場合は、<実行したユーザーのホームディレクトリ>/.ssh/id_rsaがデフォルトとなります。
Enter passphrase (empty for no passphrase)は、秘密鍵に含めるパスワードを入力します。パスワードを含めることで、秘密鍵を使用する際にこのパスワードを聞かれ、認証されない限り使用することができません。
Enter same passphrase again:パスワードを再入力します。パスワードを入力してもしなくても聞かれます。
以上で、公開鍵(デフォルトはid_rsa.pub)と秘密鍵(デフォルトはid_rsa)が作成されます。

Windows系OSで、Tera Termを使用する場合

Tera Termを使用して、公開鍵、秘密鍵を生成します。

Tera Termを起動して表示されたダイアログをキャンセルします。
Tera Term起動直後

メニューの [SetUp] > [SSH KeyGenerator…] を選択します。
SSH KeyGeneratorを選択

表示されるSSH KeyGeneratorダイアログでKey typeがRSA、Key Bitsが2048以上になっていることを確認し、Generateボタンをクリックします。

RSAを選択することで、SHA-2で鍵ファイルを作成することができます。

ダイアログ中ほどにkey generatedと表示されれば鍵ファイルが作成されました。

必要に応じて、Key passphraseCommentを入力します。

Save public keyボタンをクリックすることで公開鍵を保存することができます。

Save private keyボタンをクリックすることで秘密鍵を保存することができます。

Windows系OSで、PuTTYを使用する場合

PuTTYを使用して、公開鍵、秘密鍵を生成します。

PuTTYに同梱されているPUTTYGEN.exeを起動します。存在しいない場合は、PuTTYの公式サイトにあるputtygen.exe (a RSA and DSA key generation utility)と記載のあるputtygen.exeをダウンロードして起動します。

起動したPuTTY Key Generatorの下部にあるtype of key to genrateRSANumber of bits in a generated key2048以上になっていることを確認し、ウィンドウ中ほどにあるGenrateをクリックします。

表示されているPuTTY Key Generatorのウィンドウ内でマウスカーソルを適当に動かしてください。一定間隔でマウスカーソルの位置を取得して、鍵のランダム性を確保します。マウスを動かす量は、鍵長により変わります。

鍵の生成が完了すると上部のkey部分に公開鍵の文字列が表示されます。

上部に表示されているPublic key for pasting into OpenSSH authorized_keys fileの部分は、OpenSSHでSSHする際に許可された公開鍵の文字列を保持するauthorized_keysファイルに記載する文字列になります。

必要に応じて、Key passphraseやCommentを入力します。

Save public keyボタンをクリックすることで公開鍵を保存することができます。

Save private keyボタンをクリックすることで秘密鍵を保存することができます。

接続先(サーバなど)で行う作業

サーバ側では、作成した公開鍵の情報を認証済みの鍵ファイルとして設定します。
これにより、公開鍵、秘密鍵を使用したSSHを使用することができるようになります。

まずは認証済みの鍵ファイルを保存するファイル「authorized_keys」が~/.ssh/ディレクトリに存在するか確認します。

存在しない場合は作成します。

作成したauthorized_keysファイルに、作成した公開鍵の情報を追記します。※上書きはしないようにしてください。

まとめ

この方式でサーバへログインするようにすると、冒頭のパスワードの総当たり攻撃や辞書攻撃をされても鍵ファイルがないためにログインすることができなくなり、セキュリティ的に強くなります。ただし、公開鍵ファイルを配布して登録しても、sshd_configで鍵ファイルでのログインを強制していないとログインID、パスワードでログインできてしまうため注意が必要です。

総当たり攻撃
例えば、0~9、a~z、A~Zの組み合わせ(さらに記号が入る場合もある)で「0」から「ZZZZZ」までのすべてのパターンを試す方法
辞書攻撃
「pass」、「password」、「sunday」、「HelloWorld」など、特定の単語やよくある文字(「p@ssw0rd」など)を予め作成しておき、それを片っ端から試す方法
Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です