Ubuntu12.04でSSHキーを設定する方法
序章
セキュアシェルプロトコル(またはSSH)は、ユーザーがセキュリティで保護されていないネットワークを介してリモートコンピューターに安全にアクセスできるようにする暗号化ネットワークプロトコルです。
SSHはパスワードベースの認証をサポートしていますが、通常は代わりにSSHキーを使用することをお勧めします。 SSHキーは、一般的なブルートフォースパスワードハッキング攻撃に対して脆弱ではないため、SSHサーバーにログインするためのより安全な方法です。
SSHキーペアを生成すると、公開キーと秘密キーの2つの長い文字列が作成されます。 公開鍵を任意のサーバーに配置してから、秘密鍵にアクセスできるSSHクライアントを使用してサーバーに接続できます。
公開鍵と秘密鍵が一致すると、SSHサーバーはパスワードを必要とせずにアクセスを許可します。 オプションの(ただし強く推奨される)パスフレーズを使用して秘密鍵を保護することにより、鍵ペアのセキュリティをさらに高めることができます。
注: DigitalOceanアカウントでのSSHキーの設定に関する情報をお探しの場合は、SSHキーに関するDigitalOcean製品ドキュメントを参照してください。
ステップ1—キーペアを作成する
最初のステップは、クライアントマシンでキーペアを作成することです。 これはおそらくローカルコンピュータになります。 ローカルコマンドラインに次のコマンドを入力します。
- ssh-keygen -t ed25519
OutputGenerating public/private ed25519 key pair.
キー生成プロセスが開始されたことの確認が表示され、次のステップで説明するいくつかの情報の入力を求められます。
注: ed25519
キーペアの作成をサポートしていない古いシステムを使用している場合、または接続しているサーバーがそれらをサポートしていない場合は、強力なrsa
キーペア:
- ssh-keygen -t rsa -b 4096
これにより、-t
の「タイプ」フラグがrsa
に変更され、-b 4096
の「ビット」フラグが追加されて4096ビットのキーが作成されます。
ステップ2—キーを保存する場所を指定する
ssh-keygen
コマンドの最初のプロンプトで、キーを保存する場所を尋ねられます。
OutputEnter file in which to save the key (/home/sammy/.ssh/id_ed25519):
ここでENTER
を押すと、ファイルをホームディレクトリの.ssh
ディレクトリのデフォルトの場所に保存できます。
または、プロンプトの後に入力してENTER
を押すと、別のファイル名または場所を選択できます。
ステップ3—パスフレーズを作成する
ssh-keygen
からの2番目の最後のプロンプトでは、パスフレーズを入力するように求められます。
OutputEnter passphrase (empty for no passphrase):
パスフレーズを使用するかどうかはあなた次第ですが、強くお勧めします。暗号化スキームに関係なく、キーペアのセキュリティは、他の誰もアクセスできないという事実に依存します。
パスフレーズのない秘密鍵が許可されていないユーザーの所有物になった場合、それらのユーザーは、関連付けられた公開鍵を使用して構成した任意のサーバーにログインできます。
パスフレーズを入力することの主な欠点は、ssh-agent
サービスを使用することで軽減できます。このサービスは、ロック解除されたキーを一時的に保存し、SSHクライアントからアクセスできるようにします。 これらのエージェントの多くは、オペレーティングシステムのネイティブキーチェーンと統合されているため、ロック解除プロセスがさらにシームレスになります。
要約すると、キー生成プロセス全体は次のようになります。
- ssh-keygen -t ed25519
OutputGenerating public/private ed25519 key pair.
Enter file in which to save the key (/home/sammy/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sammy/.ssh/id_ed25519
Your public key has been saved in /home/sammy/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:EGx5HEXz7EqKigIxHHWKpCZItSj1Dy9Dqc5cYae+1zc sammy@hostname
The key's randomart image is:
+--[ED25519 256]--+
| o+o o.o.++ |
|=oo.+.+.o + |
|*+.oB.o. o |
|*. + B . . |
| o. = o S . . |
|.+ o o . o . |
|. + . ... . |
|. . o. . E |
| .. o. . . |
+----[SHA256]-----+
これで、公開鍵は/home/sammy/.ssh/id_ed25519.pub
に配置されます。 秘密鍵は/home/sammy/.ssh/id_ed25519
にあります。
ステップ4—公開鍵をサーバーにコピーする
キーペアが生成されたら、接続するサーバーに公開キーを配置します。
ssh-copy-id
コマンドを使用して、公開鍵をサーバーのauthorized_keys
ファイルにコピーできます。 例のユーザー名とアドレスを必ず置き換えてください。
- ssh-copy-id sammy@your_server_address
コマンドが完了すると、パスワードの入力を求められることなく、SSH経由でサーバーにログインできるようになります。 ただし、SSHキーの作成時にパスフレーズを設定すると、その時点でパスフレーズの入力を求められます。 これは、秘密鍵の復号化を要求するローカルssh
クライアントであり、パスワードを要求するリモートサーバーではありません
手順5—パスワードベースのSSH認証を無効にする(オプション)
SSHキーをサーバーにコピーしたら、パスワードベースの認証を無効にするようにSSHサーバーを構成して、パスワードログインを完全に禁止することができます。
警告:パスワードベースの認証を無効にする前に、 SSHキーを使用してサーバーに正常にログオンできること、およびパスワードを使用してログに記録する他のユーザーがサーバー上にいないことを確認してくださいの。
パスワードベースのSSH認証を無効にするには、SSH構成ファイルを開きます。 通常、次の場所にあります。
- sudo nano /etc/ssh/sshd_config
このコマンドは、nano
テキストエディタ内でファイルを開きます。 PasswordAuthentication
を含むファイル内の行を検索し(存在しない場合は行を作成し)、行の先頭に#
がコメントアウトされていないことを確認します。 no
に変更します。
PasswordAuthentication no
終了したら、ファイルを保存して閉じます。 nano
で、CTRL+O
を使用して保存し、ENTER
を押してファイル名を確認してから、CTRL+X
を押して終了します。
sshd
サービスをリロードして、次の変更を有効にします。
- sudo systemctl reload sshd
現在のSSHセッションを終了する前に、別の端末でテスト接続を行って、接続できることを確認してください。
結論
このチュートリアルでは、SSHキーペアを作成し、公開キーをサーバーにコピーし、(オプションで)パスワードベースの認証を完全に無効にしました。
多要素認証の設定方法など、SSHとSSHサービスの詳細については、関連するチュートリアルをお読みください。