【Linux】CentOS7とUbuntuのSSH接続設定の相違
6/30にCentOS7のサービスが終了したことに伴い、VPSのテスト環境のOSをUbuntuに移行しました。
その際にSSH接続の設定方法の差異で躓く点があったので、今回はその点と解決策を紹介します。
目次
使用OS
- 移行前:CentOS Linux 7
- 移行後:Ubuntu 24.04.1 LTS
rootにログインできない
ubuntu@192.168.1.1:su -
Password:
su: Authentication failure
Ubuntuは初期設定でrootユーザーへのパスワードでのログインと切り替えが禁止されています。
CentOS7ではOSのインストール後にまずはrootにログインし、そこから一般ユーザーの作成、rootの直接ログイン不可等の各種設定を行っていたのでしたが、OSインストール時に設定した(つもり)のパスワードを入力してもssh接続が出来ないという事態に陥りました。
OSのインストール時に設定するパスワードはあくまで一般ユーザーのパスワードの為、そのユーザーでアクセスした上でroot権限を取得する方法を考える必要があります。
解決策1 – 一般ユーザーのままsudoで操作する
ubuntu@192.168.1.1:ls /root
ls: cannot open directory '/root': Permission denied
ubuntu@192.168.1.1:sudo ls /root
[sudo] password for ubuntu:
sudoに続いてコマンドを入力することで一時的にrootの権限を得てコマンドを実行できます。
例えば、/rootディレクトリはroot権限でしか閲覧出来ませんが、sudoを使用して一時的に権限を得ることで閲覧が可能になります。
一度権限を取得すれば、一定時間は再度パスワードを求められることもなくsudoコマンドを使用できるので、基本的にはこの方法でコマンド入力を行うのを想定されていると思われます。
解決策2 – rootにパスワードを設定してユーザーを切り替える
ubuntu@192.168.1.1:sudo passwd root
[sudo] password for ubuntu:
New password:
Retype password:
passwd: password updated successfully
ubuntu@192.168.1.1:su -
Password:
root@192.168.1.1:
rootへの切り替えが出来ないのはパスワードがロックされているのが理由なので、rootにパスワードを設定し、ロックを解除すれば切り替えが可能になります。
再度ログインを出来なくするには、passwd -l rootでパスワードをロックすればログイン不可の状態に戻ります。この際に間違えてpasswd -d rootでrootのパスワードを削除してしまった場合、パスワード入力をしなくてもrootに切替可能な状態になってしまうので注意が必要です。
解決策3 – 標準ユーザーからsudo su -でユーザーを切り替える
ubuntu@192.168.1.1:sudo su -
[sudo] password for ubuntu:
root@192.168.1.1:
ubuntuでは初期設定でrootへの切り替えは禁止されていますが、root権限でのrootへの切り替えは禁止されていません。その為、su –ではなくsudo su –を使えばrootに切り替えが可能です。
su –でrootに切り替えるのと比べると、/etc/sudoersを編集することでsudo su –コマンドを使用できるユーザーを制限できるという点に違いがあり、複数ユーザーを扱うVPSで制御がしやすくなります。
SSH接続の待ち受けポートが変更できない
#Port 22
Port 1234
ubuntu@192.168.1.1:systemctl restart ssh.service
ubuntu@192.168.1.1:ssh ubuntu@192.168.1.1 -p 1234
ssh: connect to host 192.168.1.1 port 1234: Connection refused
root権限の取得後、SSHの待ち受けポートの変更を行おうと/etc/ssh/sshd_configを書き換えても設定が反映されず、待ち受けポートが22のままになってしました。
これはCentOS7ではssh.serviceのみでSSH接続が管理されていたのに対し、Ubuntuではssh.socketを介してssh.serviceを動作させる様になっており、ssh.serviceの設定が書かれている/etc/ssh/sshd_configを編集しても、ssh.socketには接続ができない状態のままになってしまう為に起きています。
解決策1 – ssh.socketの待ち受けポートを編集する
ubuntu@192.168.1.1:systemctl edit ssh.socket
ssh.socketの設定ファイルは/lib/systemd/system/ssh.socketにありますが、直接編集するのは推奨されていないのでsystemctl edit ssh.socketを使用して編集を行います。
### Editing /etc/systemd/system/ssh.socket.d/override.conf
### Anything between here and the comment below will become the contents of the drop-in file
[Socket]
ListenStream=
ListenStream=1234
### Edits below this comment will be discarded
コマンドを入力すると全文がコメントアウトされたテキストが表示されるので、### Anything~と書かれた行の下に変更箇所を記入します。
ListenStream= と空欄になったものを書いているのは、最初から書かれているListenStream=22を削除する意味合いになります。編集を保存すると/etc/systemd/system/ssh.socket.d/override.confに保存されます。
ubuntu@192.168.1.1:systemctl restart ssh.socket
編集後にsystemctl restart ssh.socketでssh.socketを再起動すれば待受ポートが変更されます。
解決策2 – ssh.socketを停止させてssh.serviceのみで動作させる
ubuntu@192.168.1.1:systemctl disable ssh.socket
ubuntu@192.168.1.1:systemctl stop ssh.socket
ubuntu@192.168.1.1:systemctl enable ssh.service
ubuntu@192.168.1.1:systemctl start ssh.service
ssh.socketを停止させ、ssh.serviceのみで動作するようにすればCentOS7と同じく/etc/ssh/sshd_configを編集して待ち受けポートを変更できるようになります。
CentOS7からの移行の場合、以前のやり方で設定ができるのでこちらの方が手間が少なくなると思います。
おわりに
CentOS7から移行するにあたり、SSH接続に失敗するというのは想定していかったので、手間取った点と解決策を纏めてみました。
CentOS7のサービス終了から期間が空いている上、最近のOSではrootへのログインが不可になっているのが基本なようなので、参考になるケースは少ないかもしれませんが、Ubuntu 20.04のようなssh.socketを使用していないOSからの移行をする場合等は参考にしてみてください。
このカテゴリの最新記事
2023.07.25
2023.07.03
2024.08.22
2023.12.20