インフラ作業支援ラボInfra Support Lab← 作業ガイド← 戻る

SSHの基本設定と公開鍵認証の安全な設定方法

このページの目的:SSH設定を変更・利用する前に、接続条件と公開鍵認証の構成を確認し、接続不能や認証事故を防ぐ

このページで分かること

  • SSH接続でクライアントとサーバーが確認するもの
  • ユーザー名・ホスト・ポートの指定方法
  • 公開鍵認証とauthorized_keysの関係
  • 秘密鍵・.sshの安全な権限
  • sshd_config変更前後の確認方法
  • ~/.ssh/configで接続設定を固定する方法

先に結論

SSHは「接続先」「ユーザー」「ポート」「認証方式」「鍵」を分けて確認します。設定変更時は既存セッションを残し、sshd -tで構文確認してから別セッションで再接続を確認します。

SSH接続で指定する4つの要素

SSH接続では、少なくとも「接続先」「ユーザー」「ポート」「認証方法」を意識します。単にIPアドレスへ到達できても、ユーザー名や鍵が違えば認証は成功しません。

ssh -p 22 -i ~/.ssh/id_ed25519 user@example-server
要素確認ポイント
接続先example-serverDNS名またはIPが意図したサーバーを指しているか
ユーザーuserサーバー上に存在し、SSHログインを許可されているか
ポート22sshdのListenポートとFirewallの許可が一致するか
~/.ssh/id_ed25519対応する公開鍵が接続先ユーザーへ登録されているか
ポイント:接続先ユーザーはローカルPCのユーザーとは別です。ssh hostだけで接続するとローカルのユーザー名が使われる場合があるため、運用では接続ユーザーを明示すると確認しやすくなります。

公開鍵認証の仕組み

公開鍵認証では、クライアント側に秘密鍵、サーバー側の対象ユーザーに対応する公開鍵を配置します。秘密鍵そのものをサーバーへコピーする必要はありません。

# クライアント側の鍵を確認 ls -l ~/.ssh/ # 公開鍵の内容を確認 cat ~/.ssh/id_ed25519.pub # サーバー側(対象ユーザー) cat ~/.ssh/authorized_keys

authorized_keysは「このユーザーへのログインに使用してよい公開鍵」の一覧です。別ユーザーのホームディレクトリへ登録しても、そのユーザーで接続しない限り通常は使われません。

注意:秘密鍵は認証情報です。メールやチャットへ貼り付けたり、Webサーバーの公開ディレクトリへ置いたりしないでください。

鍵とディレクトリの権限

OpenSSHは秘密鍵やサーバー側の鍵配置場所が不用意に他ユーザーから書き換え可能な状態を嫌います。まず所有者と権限を確認します。

# クライアント側 chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 # サーバー側(対象ユーザーで) chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys

上記は一般的な安全設定例です。環境のポリシーや共有要件がある場合は、必要以上に権限を広げず要件に合わせて設定してください。

SSH鍵の権限を確認する

秘密鍵や.sshの権限を数値表記・rwx表記で確認できます。

Linux権限計算を使う
権限と所有者を詳しく確認する場合:authorized_keys.ssh、秘密鍵の700・600やStrictModesは、authorized_keysと.sshの権限ガイドで整理しています。

sshd設定を変更する前の確認

サーバー側では/etc/ssh/sshd_configsshd_config.d配下の設定が使われます。変更前に実効設定と構文を確認します。

# 実効設定の代表項目を確認 sudo sshd -T | grep -E '^(port|pubkeyauthentication|passwordauthentication|authorizedkeysfile|permitrootlogin) ' # 構文確認 sudo sshd -t

構文エラーがなければ、ディストリビューションに応じてsshdまたはsshサービスをreload/restartします。サービス名は環境で異なるため確認してから操作します。

設定変更時の安全策:リモート作業では現在のSSHセッションを切断せずに残し、別ターミナルから新規接続できることを確認してから既存セッションを閉じます。Firewallや認証設定を同時に変更すると原因切り分けが難しくなるため、変更単位も分けます。

SSHクライアント設定

毎回ユーザー・ポート・鍵を指定する場合は~/.ssh/configへまとめると、鍵の指定漏れやユーザー名間違いを減らせます。

Host app-prod HostName 192.0.2.10 User appuser Port 22 IdentityFile ~/.ssh/id_ed25519 IdentitiesOnly yes

設定後はssh app-prodで接続できます。実際にどの設定が適用されるかは次で確認できます。

ssh -G app-prod | grep -E '^(hostname|user|port|identityfile) '

接続前チェックリスト

ネットワーク範囲も確認する場合:CIDR作業ガイドで接続元IPと許可範囲の考え方を確認できます。権限の仕組みはLinux権限ガイドで詳しく整理しています。