はじめに (対象読者・この記事でわかること)
この記事は、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鍵を使う」が選択され、適切な秘密鍵ファイルが指定されているか確認してください。
対処法
- 再度慎重に入力し直す: タイプミスは誰にでもあります。もう一度落ち着いて入力してみてください。
- パスワードのリセット(必要な場合): もしサーバーへのコンソール接続が可能であれば、
passwd [ユーザー名]コマンドでパスワードをリセットし、新しいパスワードで試してみましょう。 - 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 sshdActive: active (running)と表示されていれば正常に起動しています。 - SSHのポート開放状況: SSHが使用するポート(デフォルト22番)がリッスン状態になっているか確認します。
bash sudo netstat -tunlp | grep 22 # または sudo ss -tunlp | grep 22tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTENのような行が表示されれば、ポートが開放されています。
対処法
- SSHデーモンの起動: 起動していない場合や、
deadなどの表示であれば起動を試みます。bash sudo systemctl start sshd - 自動起動の設定: サーバー起動時に自動的に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=publicservices: sshが含まれているか確認してください。
対処法
- 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
対処法
- 一時的なPermissiveモードへの変更: 問題の切り分けのため、一時的にSELinuxを
Permissiveモードに設定し、接続を試みます。bash sudo setenforce 0これで接続できた場合、SELinuxが原因と特定できます。 - 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
対処法
- パーミッションの修正: パーミッションが正しくない場合は修正します。
bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys - 所有者の修正: 所有者が正しくない場合は修正します。
bash chown -R [ユーザー名]:[ユーザー名] ~/.ssh - SSHデーモンの設定変更: 必要であれば
sshd_configを修正し、サービスを再起動します。
ハマった点やエラー解決
多くのユーザーが認証失敗でつまずく典型的なポイントは以下の通りです。
- パーミッションの設定ミス: 特に鍵認証の場合、
.sshディレクトリやauthorized_keysファイルのパーミッションが厳しすぎたり緩すぎたりすると、セキュリティ上の理由で認証が拒否されます。これはエラーメッセージだけでは分かりにくいことがあります。 - SELinuxによるブロック: SELinuxは非常に強力なセキュリティ機能ですが、適切に設定されていないと正当なSSH接続もブロックしてしまいます。
audit.logの確認を怠りがちです。 sshd_configの記述ミス: コメントアウトの解除忘れ、誤字、不要な設定の残存など。- 複数の認証方法の混同: パスワード認証と鍵認証を切り替える際に、設定が中途半端になっているケース。
解決策
上記の各ステップで問題点を特定し、提示されたコマンドや設定変更を適用することが解決への近道です。
- ログの確認: まずはサーバー側のSSHログ (
/var/log/secureや/var/log/messages) を確認し、なぜ認証が失敗したのかのエラーメッセージを探します。bash sudo tail -f /var/log/secure - 段階的な切り分け: 一度に複数の設定を変更するのではなく、一つずつ確認・修正を行い、その都度SSH接続を試して問題を切り分けていきましょう。
- 変更後のサービス再起動:
sshd_configやファイアウォールの設定を変更した後は、必ずsudo systemctl restart sshdやsudo firewall-cmd --reloadを実行して変更を反映させてください。 - クライアント側のエラーメッセージの確認: TeraTermなどのSSHクライアントに表示されるエラーメッセージも重要なヒントになります。
これらの手順を丁寧に踏むことで、ほとんどのSSH認証失敗の問題は解決できるはずです。
まとめ
本記事では、CentOS7でSSH接続がTeraTermで認証失敗となる問題について、その原因から具体的な解決手順までを詳しく解説しました。
- 基本設定の徹底確認: ユーザー名、パスワード、IPアドレス、ポート番号といった基本的な接続情報が正確であることをまず確認しましょう。
- サーバー側サービスの正常性確認: SSHデーモン (
sshd) が起動しているか、ファイアウォール (FirewallD) やSELinuxがSSH接続をブロックしていないかを確認し、必要に応じて設定を修正します。 - 鍵認証時のパーミッションが最重要: 公開鍵認証を利用している場合は、
.sshディレクトリとauthorized_keysファイルのパーミッションが厳格に設定されていることがセキュリティ上不可欠であり、認証失敗の主要な原因の一つです。
この記事を通して、読者の皆さんがSSH認証失敗というトラブルに直面した際に、網羅的かつ体系的なアプローチで自力で問題を解決できるようになることを願っています。サーバー運用におけるトラブルシューティング能力を向上させ、より安全で快適なリモート作業を実現してください。 今後は、SSHのセキュリティ強化(Fail2ban導入など)についても記事にする予定です。
参考資料
