sshd の設定について、現在、私が使用しているものについて書きます。

drop-in を使う

/etc/ssh/sshd_config を書き換えるのが一般的です。 Fedora 39 にインストールされているファイルを実際に見ると、ほとんどすべての項目がコメントアウトされており、デフォルトの設定になっています。 このファイルを書き換えてしまうと、アップデートした後に .rpmsave とか .rpmnew とかが作られてゴチャゴチャするので、 drop-in を使って設定します。

drop-in の設定ファイルは /etc/ssh/sshd_config.d に配置しますが、新規インストール時点で既にファイルがありますので、中身を確認しておきます。

/etc/ssh/sshd_config.d/40-redhat-crypto-policies.conf

Include /etc/crypto-policies/back-ends/opensshserver.config

読み込み先のファイルは少々大きいので割愛しますが、cipher などのポリシーが書かれています。

/etc/ssh/sshd_config.d/50-redhat.conf

SyslogFacility AUTHPRIV

ChallengeResponseAuthentication no

GSSAPIAuthentication yes
GSSAPICleanupCredentials no

UsePAM yes

X11Forwarding yes

PrintMotd no

こちらも一つ一つの項目については改めて説明しませんが、ごく一般的な設定が書かれています。

既にここまで設定されているので、私たちが改めて設定することは多くはありません。名前が衝突しないように、ホスト名を付けてるなど各自お好みで /etc/ssh/sshd_config.d/10-example.com.conf を作成し、以下のように設定します。

PermitRootLogin no
PasswordAuthentication no

root ログインの禁止と、パスワード認証の禁止だけです。他の設定はお好みでよいと想います。

セキュアなSSHサーバの設定 https://qiita.com/comefigo/items/092137ac40f319cb14fa

待ち受けポートを変更する

sshd のポートを変更すると、SELinux の設定変更が必要になって面倒なので、22 のままにしておきます。

待ち受けポートを変えたい時は、firewalld 側で変更します。

# firewall-cmd --permanent --zone=public --add-forward-port=port=2222:proto=tcp:toport=22
# firewall-cmd --reload

VPN の内側に制限する

# firewall-cmd --permanent --zone=pubblic --remove-service=ssh
# firewall-cmd --permanent --zone=trusted --add-service=ssh
# firewall-cmd --permanent --zone=trusted --add-forward-port=port=2222:proto=tcp:toport=22
# firewall-cmd --reload

Touch ID でログインする

ログイン先で sudo する時にも Touch ID での認証を要求する

Touch ID は ssh の鍵交換の一部に組み込まれているので、ssh-agent を使ってログイン先にも持ち込むことができます。

sudo の認証時に ssh-agent を使えるようにするモジュールがあるので、インストールします。

# dnf -y install pam_ssh_agent_auth

sudo の認証にssh-agent を使うように設定します。/etc/pam.d/sudo に以下の行を追加します。

#%PAM-1.0
auth       sufficient   pam_ssh_agent_auth.so file=~/.ssh/authorized_keys
auth       include      system-auth
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so revoke
session    required     pam_limits.so
session    include      system-auth

この設定では、一番最初に ssh-agent を使って認証を試みます。ssh-agnet が使えない場合は、それ以外の方式にフォールバックします。

/etc/sudoers.d/user を作成します。sudoer の drop-in を作成する場合も、必ず visudo を使って編集し、構文チェックを受けてください。

Defaults	env_keep += "SSH_AUTH_SOCK"

ssh-agent の認証には、環境変数 SSH_AUTH_SOCK が必要です。親プロセスから SSH_AUTH_SOCK を引き継ぐする設定にします。

こちらはクライアント側です。ssh-agent の転送を有効にします。

~/.ssh/config を編集します。

Host seinolab seinolab.jp
   Hostname seinolab.jp
   Port 5022
   User seino
   IdentityAgent /Users/seino/Library/Containers/com.maxgoedjen.Secretive.SecretAgent/Data/socket.ssh
   ForwardAgent yes

これで、ssh ログイン時に Touch ID の認証を一回、sudo する時に、再度 Touch ID での認証を求められます。が、若干不安定で、ssh ログイン時は問題なくても、sudo の時に失敗することがあります。その時は諦めてやり直すか、パスワードを入力してください。

SSH Agent Hijacking(SSHエージェントハイジャッキング)を試す https://qiita.com/aki3061/items/99f1cce099c64d66861f