はじめに (対象読者・この記事でわかること)

この記事は、CentOS7を搭載したサーバーへSSH接続を試みた際に、TeraTermなどのクライアントツールで「認証失敗」エラーに遭遇し、解決策を探しているプログラミング初学者の方や、Linuxサーバーの運用に携わる方を対象としています。

この記事を読むことで、SSH認証失敗の一般的な原因を理解し、CentOS7における具体的な確認・解決手順を学ぶことができます。特に、パスワード認証や鍵認証の設定ミス、ファイアウォールやSELinuxの設定といった、つまずきやすいポイントとその対処法を網羅的に解説しています。SSH接続のトラブルシューティングスキルを身につけ、サーバーへの安定した接続を実現できるようになるでしょう。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 * Linuxの基本的なコマンド操作(ls, cd, vi, systemctlなど) * ネットワークの基本的な知識(IPアドレス、ポート番号など) * TeraTermなどのSSHクライアントツールの基本的な操作経験

SSH接続と認証失敗の背景:なぜ接続できないのか?

SSH (Secure Shell) は、ネットワーク経由でリモートのコンピュータに安全に接続し、コマンドを実行したりファイルを転送したりするためのプロトコルです。サーバー管理や開発において不可欠なツールですが、設定ミスや環境要因によって認証失敗となり、接続できないという問題は非常に頻繁に発生します。

SSHの認証失敗が起こる主な原因は多岐にわたります。最も単純なものとしては、ユーザー名やパスワードの入力ミスが挙げられますが、他にもサーバー側の設定(SSHデーモンの状態、ファイアウォール、SELinux)、鍵認証を使用している場合の鍵ファイルやパーミッションの問題など、様々な要因が考えられます。これらの原因は複雑に絡み合うこともあり、問題解決には体系的なアプローチが必要です。

この記事では、TeraTermでの認証失敗という具体的な事象を切り口に、CentOS7環境でよくある原因と、それらを一つずつ確認し、解決していくための具体的な手順を解説します。問題の切り分けと正しい診断方法を理解することで、今後同様のトラブルに遭遇した際にも、自力で解決できるようになることを目指します。

TeraTerm認証失敗からの脱却!CentOS7での確認と解決ステップ

ここでは、TeraTermでSSH接続が認証失敗になる際の具体的な確認手順と解決策を、ステップバイステップで解説します。サーバーに直接アクセスできる状態(コンソール接続など)で作業を進めることを推奨します。

ステップ1: 基本的な接続情報と認証情報の再確認

まず、最も単純なミスがないかを確認します。

確認事項

  • ホスト名 (IPアドレス) とポート番号: TeraTermの接続ダイアログで入力したIPアドレスやホスト名、ポート番号(デフォルトは22)が正しいか確認してください。
  • ユーザー名とパスワード: 入力したユーザー名(例: root や作成したユーザー名)とパスワードが正確か、大文字・小文字、数字、記号も含めて再確認してください。Caps LockやNum Lockの状態もチェックしましょう。
  • TeraTermのSSH認証方法: 認証方法が「パスワード」になっているか、もし鍵認証を試している場合は「RSA/DSA/ED25519鍵を使う」が選択され、適切な秘密鍵ファイルが指定されているか確認してください。

対処法

  1. 再度慎重に入力し直す: タイプミスは誰にでもあります。もう一度落ち着いて入力してみてください。
  2. パスワードのリセット(必要な場合): もしサーバーへのコンソール接続が可能であれば、passwd [ユーザー名] コマンドでパスワードをリセットし、新しいパスワードで試してみましょう。
  3. SSHデーモンの設定確認(パスワード認証): サーバー側でパスワード認証が許可されているか確認します。 bash sudo vi /etc/ssh/sshd_config ファイル内で以下の行を確認し、yes になっていることを確認してください。もしコメントアウトされていれば解除し、no であれば yes に変更します。 PasswordAuthentication yes 変更後はSSHサービスを再起動します。 bash sudo systemctl restart sshd

ステップ2: サーバー側のSSHサービスの状態確認

SSHデーモン (sshd) 自体が正常に動作しているかを確認します。

確認事項

  • SSHデーモンの起動状態: SSHデーモンが起動しているか確認します。 bash sudo systemctl status sshd Active: active (running) と表示されていれば正常に起動しています。
  • SSHのポート開放状況: SSHが使用するポート(デフォルト22番)がリッスン状態になっているか確認します。 bash sudo netstat -tunlp | grep 22 # または sudo ss -tunlp | grep 22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN のような行が表示されれば、ポートが開放されています。

対処法

  1. SSHデーモンの起動: 起動していない場合や、dead などの表示であれば起動を試みます。 bash sudo systemctl start sshd
  2. 自動起動の設定: サーバー起動時に自動的にSSHデーモンが立ち上がるように設定します。 bash sudo systemctl enable sshd

ステップ3: ファイアウォール (FirewallD) の設定確認

CentOS7ではFirewallDが標準で動作しており、SSHポートがブロックされている可能性があります。

確認事項

  • FirewallDの有効化状態: FirewallDが動作しているか確認します。 bash sudo systemctl status firewalld
  • SSHサービスの許可状況: FirewallDでSSHサービスが許可されているか確認します。 bash sudo firewall-cmd --list-all --zone=public services: ssh が含まれているか確認してください。

対処法

  1. SSHサービスの追加: もし services: ssh が含まれていない場合、SSHサービスを許可します。 bash sudo firewall-cmd --add-service=ssh --zone=public --permanent sudo firewall-cmd --reload --permanent オプションで設定を永続化し、--reload で設定を反映させます。

ステップ4: SELinux の設定確認

SELinux (Security-Enhanced Linux) は、システムへのアクセス制御を強化する機能ですが、これがSSH接続を妨げることがあります。

確認事項

  • SELinuxのモード: SELinuxが Enforcing モードになっているか確認します。 bash sudo sestatus
  • SELinuxのログ: SELinuxがSSH接続をブロックしている場合、audit.log にその記録が残ることがあります。 bash sudo grep sshd /var/log/audit/audit.log

対処法

  1. 一時的なPermissiveモードへの変更: 問題の切り分けのため、一時的にSELinuxを Permissive モードに設定し、接続を試みます。 bash sudo setenforce 0 これで接続できた場合、SELinuxが原因と特定できます。
  2. SELinuxポリシーの調整: Permissive モードで解決した場合は、恒久的な解決策としてSELinuxポリシーを適切に設定するか、あるいは sshd_config でSSHポートを変更している場合は、以下のコマンドでそのポートをSELinuxに登録します。 bash # 例: SSHポートを2222に変更した場合 sudo semanage port -a -t ssh_port_t -p tcp 2222 一時的に Permissive にした後、接続できたら必ず Enforcing に戻すか、恒久的な対策を検討してください。 bash sudo setenforce 1 注意: SELinuxを完全に無効化するのはセキュリティリスクが高まるため、推奨されません。

ステップ5: 鍵認証での接続失敗の場合の追加確認点

パスワード認証ではなく、公開鍵認証を利用している場合に認証失敗となるケースです。

確認事項

  • サーバー側の公開鍵: サーバーのユーザーのホームディレクトリ (~/.ssh/authorized_keys) に、クライアントの公開鍵が正しく登録されているか。 bash sudo cat ~/.ssh/authorized_keys
  • パーミッション設定: .ssh ディレクトリと authorized_keys ファイルのパーミッションが適切か。これはSSH接続において非常に重要です。
    • ~/.ssh ディレクトリのパーミッション: rwx------ (700)
    • ~/.ssh/authorized_keys ファイルのパーミッション: rw------- (600)
    • また、これらのファイルとディレクトリの所有者が、接続しようとしているユーザー自身である必要があります。
  • SSHデーモンの設定: /etc/ssh/sshd_config で鍵認証が有効になっているか。 PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys

対処法

  1. パーミッションの修正: パーミッションが正しくない場合は修正します。 bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
  2. 所有者の修正: 所有者が正しくない場合は修正します。 bash chown -R [ユーザー名]:[ユーザー名] ~/.ssh
  3. SSHデーモンの設定変更: 必要であれば sshd_config を修正し、サービスを再起動します。

ハマった点やエラー解決

多くのユーザーが認証失敗でつまずく典型的なポイントは以下の通りです。

  • パーミッションの設定ミス: 特に鍵認証の場合、.ssh ディレクトリや authorized_keys ファイルのパーミッションが厳しすぎたり緩すぎたりすると、セキュリティ上の理由で認証が拒否されます。これはエラーメッセージだけでは分かりにくいことがあります。
  • SELinuxによるブロック: SELinuxは非常に強力なセキュリティ機能ですが、適切に設定されていないと正当なSSH接続もブロックしてしまいます。audit.log の確認を怠りがちです。
  • sshd_config の記述ミス: コメントアウトの解除忘れ、誤字、不要な設定の残存など。
  • 複数の認証方法の混同: パスワード認証と鍵認証を切り替える際に、設定が中途半端になっているケース。

解決策

上記の各ステップで問題点を特定し、提示されたコマンドや設定変更を適用することが解決への近道です。

  1. ログの確認: まずはサーバー側のSSHログ (/var/log/secure/var/log/messages) を確認し、なぜ認証が失敗したのかのエラーメッセージを探します。 bash sudo tail -f /var/log/secure
  2. 段階的な切り分け: 一度に複数の設定を変更するのではなく、一つずつ確認・修正を行い、その都度SSH接続を試して問題を切り分けていきましょう。
  3. 変更後のサービス再起動: sshd_config やファイアウォールの設定を変更した後は、必ず sudo systemctl restart sshdsudo firewall-cmd --reload を実行して変更を反映させてください。
  4. クライアント側のエラーメッセージの確認: TeraTermなどのSSHクライアントに表示されるエラーメッセージも重要なヒントになります。

これらの手順を丁寧に踏むことで、ほとんどのSSH認証失敗の問題は解決できるはずです。

まとめ

本記事では、CentOS7でSSH接続がTeraTermで認証失敗となる問題について、その原因から具体的な解決手順までを詳しく解説しました。

  • 基本設定の徹底確認: ユーザー名、パスワード、IPアドレス、ポート番号といった基本的な接続情報が正確であることをまず確認しましょう。
  • サーバー側サービスの正常性確認: SSHデーモン (sshd) が起動しているか、ファイアウォール (FirewallD) やSELinuxがSSH接続をブロックしていないかを確認し、必要に応じて設定を修正します。
  • 鍵認証時のパーミッションが最重要: 公開鍵認証を利用している場合は、.ssh ディレクトリと authorized_keys ファイルのパーミッションが厳格に設定されていることがセキュリティ上不可欠であり、認証失敗の主要な原因の一つです。

この記事を通して、読者の皆さんがSSH認証失敗というトラブルに直面した際に、網羅的かつ体系的なアプローチで自力で問題を解決できるようになることを願っています。サーバー運用におけるトラブルシューティング能力を向上させ、より安全で快適なリモート作業を実現してください。 今後は、SSHのセキュリティ強化(Fail2ban導入など)についても記事にする予定です。

参考資料