問題
CentOS/RHEL では、OpenSSH SSH Daemon (sshd) は、リモートの OpenSSH SSH (ssh) および Secure File Transfer (sftp) クライアントからの着信接続要求にポート 22 を使用します。ただし、場合によっては、システム管理者が ssh および sftp アクティビティにサービスを提供するために別のポートを使用することを好みます。そのようなケースの 1 つで、システム管理者は sshd サービスの開始中に以下のエラーに直面しています
sshd[13798]: error: Bind to port 2222 on 0.0.0.0 failed: Permission denied. sshd[13798]: error: Bind to port 2222 on :: failed: Permission denied. sshd[13798]: Server listening on 0.0.0.0 port 22. sshd[13798]: Server listening on :: port 22
解決策
sshd は最近、追加のネットワーク ポートやデフォルト以外のネットワーク ポートを使用するように再構成されました。デフォルトでは、sshd はネットワーク ポート 22 を利用するように設定されています。例:
# grep ssh /etc/services ssh 22/tcp # The Secure Shell (SSH) Protocol ssh 22/udp # The Secure Shell (SSH) Protocol ssh 22/sctp # SSH
デフォルトで有効になっている SELinux も同様に、sshd がネットワーク ポート 22 を排他的に使用することを想定し、強制します。追加のポートやデフォルト以外のポートを使用するように sshd を再構成すると、SELinux はそのポートの使用を阻止し、その結果、観察された Permission denied エラーが発生します。
1. 現在 SELinux で許可されている sshd リッスン ポートを特定します。
# semanage port -l | grep ssh ssh_port_t tcp 22
2. SELinux を設定して、sshd が追加のポート 2222 を利用できるようにします。
# semanage port -a -t ssh_port_t -p tcp 2222
3. 新しい SELinux が許可する sshd リッスン ポートを確認します。
# semanage port -l | grep ssh ssh_port_t tcp 2222,22
4. sshd サービスを再起動して変更を有効にします。
CentOS/RHEL 7/8 の場合:
# systemctl restart sshd # systemctl status sshd
CentOS/RHEL 5/6 の場合:
# service sshd restart # service sshd status