[Raspberry Pi]sshの設定でハマった話
はじめに
先日Raspberry Pi 4にインストールしたArch Linuxをネットワーク越しに設定したかったので、いくつかの設定をしました。
1. mDNSの設定
我が家のLAN環境では、DHCPによるローカルIPアドレスの払出しを行なっています。
(やっていないケースの方が少ないと思う。)
Raspberry Piはあまり再起動はしない想定ですが、固定アドレスではないため、リモート接続時に不便です。そこで、ホスト名で名前解決をできるようにmDNSをセットアップすることにしました。
1-1. avahiのインストール
mDNSソフトウェアであるavahiを利用するのが最もシンプルです。
インストールはpacmanでパッケージを持ってくれば良いです。
# pacman -S avahi
1-2. daemonの起動
daemonを起動します。
# systemctl start avahi-daemon.service
2. sshの設定
2-1. sshd_configの編集
/etc/ssh/sshd_configをvim等で編集します。
・ポート変更
ウェルノウンポート以外で好きなものを選びましょう。
Port xxxx
・パスワード認証の拒否
PasswordAuthentication no
・rootログインの拒否
PermitRootLogin no
・空パスワードを拒否
PermitEmptyPasswords no
とします。
ただ、公開鍵を紛失したときにログインできないと困るので、セキュリティ的にはイマイチですが、ローカルからのパスワード認証のみ許可しておきます。
・条件分岐
sshd_configの条件分岐は、Match句で対応できます。
Match句に該当するとその下の処理が実行される仕組みです。つまり、次のMatchまでの処理が条件分岐の中に入ります。
そのため、Match句はファイルの末尾に書きましょう。
Match Address xxx.xxx.xxx.xxx/xx
PasswordAuthentication yes
とすることで、特定のIPレンジからのアクセスのみパスワード認証を許可できます。
当然ですが、アドレスはLANの環境にあわせて設定しましょう。
2-2. sshdのリスタート
sshd_configを保存したら、設定を反映するため、sshdをリスタートします。
sshd_configの文法がおかしいと失敗するので、予め文法チェックします。
# sshd -T
何も表示されなければOKです。
デーモンをリスタートしましょう。
# systemctl restart sshd
問題
LAN内からアクセスしているのにIPアドレスマッチが機能しない
下記のコマンドで接続を試したのですが、IPアドレスがマッチせず、公開鍵認証になってしまいログイン不能になりました。
$ ssh -l user -p xxxx hoge.local
不思議なことに同じLAN内のタブレットPCからはアクセスができていたので、configがミスっているわけではないようでした。
結論
原因は、avahiがIPv6アドレスを返していたからでした。
なのでIPv4アドレス向けに接続することでログインできるようになりました。