※弊社記事はたぶんにPRが含まれますので
話半分で受け取ってください。

CentOS on Slicehost – パスワードを使わずにサーバにログイン

 全国70万人くらいのレンサバ難民の皆様、こんにちは。
 先回はSlicehostにログインして、管理用の一般ユーザを追加しました。今回はパスワードを入力せずにSSHでサーバにログイン出来るようにする、公開鍵認証の設定します。

ログインする度にパスワードを入力するのはめんどくさい上に、パスワードが漏洩するリスクも高くなります。公開鍵を使用したパスワードなら、セキュア&簡単ログインが可能です。

公開鍵/秘密鍵の作成とアップロード(ローカル)

 最初にローカルのPCに「.ssh」というディレクトリを作成します。というわけで、以下はローカルでの作業です。
 Mac(またはLinux)のターミナルを開いて以下のように入力すると、ホームディレクトリに「.ssh」と言う名前のディレクトリが作成されます。

mkdir ~/.ssh

 つづいて、鍵を作成します。以下のコマンドを実行すると.sshディレクトリ内にid_rsaとid_rsa.pubという2つのファイルが作成されます。これが鍵です。

ssh-keygen -t rsa

 このうち、「id_rsa.pub」というファイルは、サーバにある「demo」アカウントのホームディレクトリにコピーします。(以降出てくる「demo」と「123.45.67.890」の部分はそれぞれ、自分の作成したユーザ名とサーバのIPアドレスに置き換えて考えてください。)

scp ~/.ssh/id_rsa.pub demo@123.45.67.890:/home/demo/

 次にアップロードしたファイルを所定の場所に移動して、権限を設定します。これ以降はサーバーでの作業となります。

公開鍵の設定(サーバ)

 まずはサーバにログインして、rootになります。
 続いて、管理用の一般ユーザ(ここでは「demo」というユーザ)のホームディレクトリに.sshディレクトリを作成し、アップロードした鍵ファイルをその中に移動します。移動の際、ファイル名を「authorized_keys」と言う名前に変更します。以上まとめると以下のような感じ。

mkdir /home/demo/.ssh
mv /home/demo/id_rsa.pub /home/demo/.ssh/authorized_keys

つづいて、他の人に利用されないように鍵の権限を変更します。

chown -R demo:demo /home/demo/.ssh
chmod 700 /home/demo/.ssh
chmod 600 /home/demo/.ssh/authorized_keys

 これで、ユーザー「demo」はパスワード無しでサーバにアクセスできます。

SSHの設定

 さらにセキュリティを高めるために、SSHの設定をいじります。sshの設定をviで編集します。

vi /etc/ssh/sshd_config

 編集ヶ所は以下の通り。

Port 30000
Protocol 2
PermitRootLogin no
PasswordAuthentication no
X11Forwarding no
UsePAM no
UseDNS no
AllowUsers demo

「Port」はsshを接続するのに使うポート番号。デフォルトは22番ですが、セキュリティの事を考えてポート番号を変更。外から発見されにくいよう、予想されにくい番号を入れた方が良いらしいですが、気休めな気もしないでもない。パスワード認証を使用しないなら、別に22番のままでも良いような気がしますが。

 「Protocol」はプロトコルのバージョン。1と2があって、簡単に言うと1より2の方がよりセキュアということらしいです。

 「PermitRootLogin」はrootでログインすることを許可するか否か。noとすることで、rootでログインできなくします。

 「PasswordAuthentication」はパスワードによる認証を行うか否か。noとすることでパスワード認証を無効にします。
 パスワードを使わずに、どうやってログインするんだ?って感じですが、そこで公開鍵による認証の設定をしたわけですね。逆に言うと、鍵でしかサーバにログインできないので、鍵をなくしたら大変。

 「X11Forwarding」「UsePAM」「UseDNS」は、何か分かりませんが(調べるのがめんどくさくなった)、なんとなくno。名前からなんとなく予想は付きますが。

 「AllowUsers」はログインを許可するユーザーです。ここではdemoを追加しています。複数設定する場合は、スペース区切りで列挙。

 実際にはこんな風に一ヶ所に全ての設定はまとまっておらず、それぞれの項目はあちこちに散らばっていました。文字列検索して探し出し、設定しました。

 以上を設定したら、保存してviを終了。

 sshの設定を有効にするため、設定を再読込します。

/etc/init.d/sshd reload

ログインのテスト

 無事、SSHの設定の再読込が完了したら、パスワード無しでアクセスできるかテストしてみます。

 現在サーバにログイン中のターミナルは開いたままにしておき、それとは別に新しいターミナルを開いて、設定したユーザでログインしてみます。
 ログイン中のターミナルを開きっぱにしておくのは、「sshの設定が間違っていて、一般ユーザでもrootでもログインできなくなった!」という悲惨な状態を回避するためです。
 以下のようにコマンドを入力すればログイン出来るハズ。「30000」はSSHの設定の時に記述したポート番号です。

ssh -p 30000 demo@123.45.67.890

 「-p 30000」とか打つのめんどくせーよ、忘れちまうよ。という人は以下でもOKらしいです。

ssh demo@123.45.67.890:30000

 無事ログイン出来ると以下のように表示されます。今度はパスワードの入力をすることなくログインできます。
 もし独自ドメインを持っていて、そのドメインのDNSをこのサーバに向けているなら、ipアドレスではなく「demo@example.com」のようにドメインで指定することも出来ます。

参考

標準テキスト CentOS 8 構築・運用・管理パーフェクトガイド [CentOS Stream対応]

  • メーカー:SBクリエイティブ
  • カテゴリ:Kindle版
  • 発売日:2021/07/21

関連する記事