何年かぶりにさくらのVPSを新たに契約して、新しいLinux環境をつくったので覚え書き。
申し込んでしばらくすると完了メールが届く。メールを受け取ったらさくらのVPSのコントールパネルからサーバーに電源を入れる。
ターミナル(Poderosa)からログイン。ユーザー名は alma が自動的に作られているので、パスワードを入力してログインを試みると接続エラー。
ダイアログのメッセージは「Server does not support diffie-hellman-group1-sha1 for keyexchange」。
Poderosaのバージョンが古いのが原因なので、この機にTeraTarmに乗り換えた。
ターミナルでログイン後にやること
1.アップデート
全てのパッケージを更新する
sudo dnf update
もしくは
sudo dnf upgrade
dnf は CentOS7 までの yum と同じ。dnf は「Dandified Yum」の略らしい。
2.デフォルトのユーザー名から変更
さくらのVPSでは almaLinux をインストールするとデフォルトで alma というユーザーが作られる。デフォルトのユーザー名のままだとセキュリティ上不安なので変更する。
変更するには複数の手順を踏むことになるので別にまとめた。
3.公開鍵認証でログインできるようにする
参考ページ:SSH接続の設定変更方法
teratarm で公開鍵と秘密鍵の作成
teratarm で「設定」→「SSH鍵生成」
鍵の種類は ED25519 を選択。RSA は almalinux9 ではデフォルトで禁止になった。
サーバーログインできなくて、さくらのVPS の VNCコンソールからサーバーにログインしたら log にエラーが出ていた。
エラーログ
cat /var/log/secure
~中略~
userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
公開鍵認証の設定
サーバーに接続した teratarm の画面に公開鍵(id_rsa.pub)をドラッグアンドドロップして「SCP」を選択すると、ユーザーのホームディレクトリに転送される。
ユーザーのホームディレクトリに移動後して、公開鍵認証の設定を行う。
$ mkdir .ssh $ chmod 700 .ssh $ cat id_rsa.pub > .ssh/authorized_keys //「>」で、別のファイルに出力内容を記述している $ chmod 600 .ssh/authorized_keys $ rm -f id_rsa.pub
SSH接続の設定変更
SSH接続の設定を変更するには、sshd_config ファイルを書き換える必要がある。
cd /etc/ssh sudo vi sshd_config
ポート番号を変更する。ポート番号を22 → 49513~65535までの番号で好きなもの
[編集内容1]
#Port 22 ↓ Port XXXX 「#」を削除します。SSH接続のportを22から任意の番号へ変更も可能です。
SSHを使った root でのログインを禁止
[編集内容2]
#PermitRootLogin yes ← almalinux8 #PermitRootLogin prohibit-password ← almalinux9 ↓ PermitRootLogin no 「#」を削除し"yes"を"no"に変更することで、rootユーザーでのログインを無効にします。
パスワード認証を無効にする
[編集内容3]
PasswordAuthentication yes ↓ PasswordAuthentication no "yes"を"no"に変更することで、パスワード認証を無効にします。
構文チェック
sudo sshd -t
再起動
sudo systemctl restart sshd
/etc/ssh/ と ~/.ssh 違い
https://itstudy365.com/blog/2018/12/30/etc-ssh-%E3%81%A8-ssh-%E9%81%95%E3%81%84/
firewalld に新しいポート番号を追加
参考サイト
firewalld の現在の状態を確認
systemctl status firewalld
結果
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendo>
Active: inactive (dead)
Docs: man:firewalld(1)
抜ける場合は q
firewalld が起動していないので、起動させる
sudo systemctl start firewalld
firewalld起動時にサーバーとの通信が遮断される(ターミナルが落ちる)場合、firewalldで許可されていないポートで通信が行われていたと考えられる。この場合は、起動前にfirewalldにポート使用を許可するように設定しておく必要がある。
OS起動時の自動起動有効化
sudo systemctl enable firewalld
$ sudo firewall-cmd --list-all
現在のサービスを確認
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ssh ←許可された通信
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
sshd_config ファイルに記述した Port番号を使えるようにするために、firewalld を修正する。
もともとある /usr/lib/firewalld/services/ssh.xml を /etc/firewalld/ にコピーして修正する。
POINT
/usr/lib/firewalld/services/ssh.xml はシステム初期設定の保存場所
/etc/firewalld/services/ はユーザーが変更した設定の保存場所
cd /usr/lib/firewalld/services
cp ssh.xml /etc/firewalld/services/ssh-○○新しいポート番号.xml //copy
vi ssh-○○新しいポート番号.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and
executing commands on remote machines.It provides secure encrypted co……
If you plan on accessing your machine remotely via SSH over a firewal……
enable this option. You need the openssh-server package installed for……
to be useful.</description>
<port protocol="tcp" port="22"/> ← port="22" を port="○○新しいポート番号" に変更
</service>
リロード
firewall-cmd --reload
作成したサービス(ssh-○○新しいポート番号)を追加して、デフォルトのサービス ssh を削除する。
firewall-cmd --permanent --add-service=ssh-○○新しいポート番号 <----- 追加
firewall-cmd --permanent --remove-service=ssh <----- 削除
firewall-cmd --reload
サービスが追加されたことを確認する
firewall-cmd --list-all
結果
public (active)
target: default
icmp-block-inversion: no
interfaces: ens3
sources:
services: cockpit dhcpv6-client ssh-○○新しいポート番号
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules: