前置き
SSHのサーバ側の設定についてです。
Linux端末にSSH接続する時、接続元によってSSHの認証方法を切り替えた時のメモ。
- 環境
- Ubuntu 16.04.3 LTS
- 編集ファイル
/etc/ssh/sshd_config
「外部アクセスは公開鍵認証、内部アクセスはパスワード認証」という設定を目指します。
sshd_config
の基礎的なこと(公開鍵認証の設定方法とか)がわかっていることを前提として記載します。
Matchによる設定
sshd_configにMatch
を書くことによって、接続元IP、ポート、ユーザなどによって設定を変えることができます。
条件が一つの場合
まずは開発端末(1台)からのアクセスをMatch
で分岐させてみます。
# パスワード認証を無効にする
PasswordAuthentication no
# 192.168.1.11(開発端末のIP)からのアクセスの場合、パスワード認証を有効にする(上側の設定を上書きする)
Match Address 192.168.1.11
PasswordAuthentication yes
Matchを複数書く場合
Match
の範囲は「次のMatch
まで」または「ファイル末尾まで」です。
なのでMatch
をsshd_config
の途中に書くことはできません。
Match Address 192.168.1.11
PermitEmptyPasswords yes # 192.168.1.11からアクセスした時に適用される
Match User ssh_user
PasswordAuthentication yes # ユーザ"ssh_user"でログインしようとした時に適用される
RSAAuthentication yes # ユーザ"ssh_user"でログインしようとした時に適用される。インデントは関係ない(無視される)
Matchに書く条件が複数の場合
条件はスペース区切りで複数書けます。
IPはカンマ区切りで複数書けます。プレフィックスを使った書き方もできます。
私の場合、「内部アクセスの場合はパスワード認証」とする設定は以下のようになりました。
# 二つのポートを有効にする
Port 22
Port 10022
# パスワード認証を無効にする
PasswordAuthentication no
# 内部IPからのアクセスで、さらにポート番号が10022だった場合、パスワード認証を有効にする
Match Address 10.0.0.0/22,192.168.1.0/24 LocalPort 10022
PasswordAuthentication yes
さらに詳しく知りたい場合
基本的なことはもちろんウェブ検索でわかると思います。
ですが複雑で細かな設定をしたい場合は、SSHサーバでman sshd_config
と打って、Match
に関する記述を確認することがおすすめです。
環境によって使える条件が少しずつ違うらしいです(CentOS6とCentOS7では結構違うらしい)。