OpenSSHの設定について整理する(sshd_config)

OpenSSHの主な設定ファイルは以下の2つになります。
・/etc/ssh/sshd_config
ssh(sshサーバー)の設定ファイル
・/etc/ssh/ssh_config
ssh(sshクライアント)の設定ファイル

もう1つ、sshクライアントの設定ファイルとして~/.ssh/configがあります。
両者の違いは~/.ssh/configが各ユーザーの設定に対して、
/etc/ssh/ssh_configはシステム共通の設定になります。
設定は前者の~/.ssh/configの方が優先されます。

今回はsshサーバーの設定(sshd_config)について整理しました。

作業環境
OS: Windows7 Home Premium 64bit
VirtualBox: 5.0.2
Vagrant: 1.7.4
CentOS: 6.7
OpenSSH: OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013

Port 22
AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::
パラメータ 説明
Port PortNo sshdが使用するデフォルトのポート番号。
AddressFamily any|inet| inet6 sshdIPv4,IPv6,IPv4IPv6の両方のいづれかで有効にするかを指定する。
・ListenAddress host|IPv4_addr|IPv6_addr
・ListenAddress host|IPv4_addr:Port
・ListenAddress host|IPv6_addr:Port
sshdが接続を受け付けるローカルアドレスを指定。Portが指定されていない場合には、Portパラメータで指定したポート番号に対してListenする。
# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
Protocol 1|2 sshdがサポートするSSHプロトコルバージョン。SSH1のみを使用する場合は1、SSH2のみを使用する場合は2、両方使用する場合は"1,2"と設定する。
Hostkey ホスト鍵ファイルのパス SSHで使用する、ホスト秘密鍵が格納されているファイルのパスを指定する。
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
KeyRegenerationInterval(時間) SSH1では、サーバ鍵を指定した間隔ごとに自動的に再生成される。その自動的に鍵を再生成する間隔。
ServerKeyBits ビット数 SSH1で使用されるサーバ鍵のビット数。最小値は512で、デフォルトは1024。
SyslogFacility ファシリティ名 sshdがsyslogサーバに出力するログメッセージのファシリティ(分類)を指定。デフォルトはAUTH。
LogLevel ログレベル sshdが出力するログのログレベルの指定。QUITE,FATAL,ERROR,INFO,VERBOSE,DEBUG,DEBUG1,DEBUG2,DEBUG3
#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
LoginGraceTime(時間) ユーザが指定時間内にログインできないと、サーバの接続を切る。
PermitRootLogin Yes|no sshでrootがログインすることを許可する。
StrictModes yes ログイン前にユーザのディレクトリやファイルのパーミッションをチェックする。デフォルトはyes。
MaxAuthTries 回数 認証の再試行最大数。指定地の半数以上の認証が失敗すると、それ以降失敗はログに記録される。デフォルトは6。
MaxSessions 数 最大同時接続数。デフォルトは10。
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody
RSAAuthentication Yes|no RSA認証を有効にする。RSA認証はSSH1のみ有効にすることができる。
PubkeyAuthentication Yes|no 公開鍵認証を許可する。デフォルトはyes(許可)。
AuthorizedKeysFile パス ユーザ認証の際に使用される公開鍵を格納しているファイル名を指定する。絶対パス、もしくはユーザのホームディレクトリからの相対パスで指定する。
AuthorizedKeysCommand command 公開鍵を取得するために使用するコマンドを指定する。
AuthorizedKeysCommandRunAs AuthorizedKeysCommand を実行するときのユーザを指定する。
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
RhostsRSAAuthentication Yes|no RSAホスト間認証が成功しているときに、rhostsや/etc/hosts.equivを使った認証を許可する。デフォルトはnoで、SSH1のときのみ有効。
HostbasedAuthentication Yes|no 公開鍵ホスト認証が成功したときに、rhostsあるいは/etc/hosts.equiv認証を許可する(ホストベーストド認証)。デフォルトはno。
IgnoreUserKnownHosts Yes|no RhostsRSAAuthenticationまたはHostbasedAuthenticationの各認証で、ユーザの~/.ssh/known_hostsファイルを使わないようにする。デフォルトはno。
IgnoreRhosts Yes|no RhostsRSAAuthenticationまたはHostbasedAuthenticationの各認証で、.rhostsおよび.shostsを使用しないようにする。デフォルトはno。
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no
PasswordAuthentication Yes|no パスワード認証を許可する。デフォルトはyes。
PermitEmptyPasswords Yes|no パスワード認証を許可しているときに、パスワード文字列がからのアカウントに対してサーバがログインを許可するかどうかを指定。デフォルトはno。
ChallengeResponseAuthentication Yes|no チャレンジレスポンス認証を許可する。デフォルトはyes。
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes
KerberosAuthentication Yes|no ケルベロス認証を許可する。デフォルトはno。
KerberosOrLocalPasswd Yes|no ケルベロス認証で失敗した場合には、ローカルパスワードで認証する。デフォルトはyes。
KerberosTicketCleanup Yes|no ログアウト時にケルベロス認証用のキャッシュを自動的に削除する。デフォルトはyes。
KerberosGetAFSToken Yes|no ケルベロス認証で、AFSトークンを取得する。デフォルトはno。
KerberosUseKuserok Yes|no ケルベロス認証で、.k5loginがあればこれを使用する。デフォルトはyes。
# GSSAPI options
#GSSAPIAuthentication no
GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
GSSAPIAuthentication Yes|no GSSAPIベースのユーザ認証を使用する。デフォルトはno。SSH2のみ適用される。
GSSAPICleanupCredentials Yes|no ユーザがログアウトするとき、その証明書キャッシュを自動的に消去する。デフォルトはyes。SSH2のみ適用される。
GSSAPIStrictAcceptorCheck Yes|no GSSAPIアクセプタのチェックを厳格に行う。デフォルトはyes。
GSSAPIKeyExchange Yes|no GSSAPIを許可するために鍵交換を行う。デフォルトはno。
#UsePAM no
UsePAM yes
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
UsePAM Yes|no PAM(Pluggable Authentication Module)インターフェースによる認証を許可する。デフォルトはno。
AcceptEnv 環境変数 クライアントから送信されてきた環境変数のうち、有効にするものを指定する。
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
AllowAgentForwarding Yes|no ssh-agentによるエージェント転送を許可する。デフォルトはyes。
AllowTcpForwarding Yes|no TCP転送を許可する。デフォルトはyes。
GatewayPorts Yes|no ポート中継を許可する。デフォルトはno。
X11Forwarding Yes|no X11転送を許可する。デフォルトはno。
X11DisplayOffset 10 X11転送をするときに最初に使用されるディスプレイ番号。デフォルトは10。
X11UseLocalhost Yes|no X11localhostのみ許可する。デフォルトはyes。
PrintMotd Yes|no ログイン時に/etc/motdの内容を表示する。デフォルトはyes。
PrintLastLog Yes|no ログイン時に前回ログインした日時と時刻を表示する。デフォルトはyes。
TCPKeepAlive Yes|no TCPキープアライブメッセージを送信する。デフォルトはyes。
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
UseLogin Yes|no ログインでloginプログラムを使用する。デフォルトはno。
UsePrivilegeSeparation Yes|no sshdがセッションを受け付けるネットワークトラフィックを処理するためにroot権限を分離する。デフォルトはyes。
PermitUserEnvironment Yes|no ユーザの環境変数の変更を許可する。デフォルトはno。
Compression Yes|no|delayed 圧縮を許可する。デフォルトはdelayed(ユーザが認証されてから圧縮を許可する)。
ClientAliveInterval 0 クライアントの生存チェック間隔。デフォルトは0(チェックしない)。
ClientAliveCountMax 3 クライアントの生存チェック最大カウント数。デフォルトは3。
ShowPatchLevel Yes|no セッション確立時にクライアントにOpenSSHのパッチレベルを通知する。デフォルトはno。
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no
#ChrootDirectory none
# no default banner path
#Banner none
UseDNS Yes|no DNSを使用してリモートホスト名を確認する。デフォルトはyes。
PidFile /var/run/sshd.pid PIDファイルの出力先を指定。
MaxStartups 10 sshdが認証成功までの接続を受け付ける最大数。デフォルトは10。
PermitTunnel no トンネリングを許可する。デフォルトはno。
ChrootDirectory none chrootを行うディレクトリのパス名を指定。
Banner none セッション確立時に表示する文字列。
# override default of no subsystems
Subsystem sftp /usr/libexec/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
Subsystem 外部サブシステムを指定。
Match 条件に一致した場合の処理を指定する、条件分岐を行う。

特に重要な項目は太字にしてあります。

sshd_configを編集したら、設定が間違っていないか確認しましょう。
特にリモートのサーバー(AWSのEC2など)で認証関連の設定が間違っていた場合、ssh接続できなくなってしまいます。

EC2の場合は下記のやり方などで修復できますが、事前に防ぎたいですよね。
ログインできないec2インスタンスを調査する | Developers.IO

設定ファイルの正当性をチェックするだけなら、tオプションを使います。

usage: sshd [-46DdeiqTt] [-b bits] [-C connection_spec] [-c host_cert_file]
[-f config_file] [-g login_grace_time] [-h host_key_file]
[-k key_gen_time] [-o option] [-p port] [-u len]

# /usr/sbin/sshd -t
#

Tオプションを使うと、設定ファイルの正当性をチェックし、有効な設定項目を標準出力に表示します。

# /usr/sbin/sshd -T
port 22
protocol 2
addressfamily any
listenaddress 0.0.0.0:22
listenaddress [::]:22
usepam 1
serverkeybits 1024
logingracetime 120
keyregenerationinterval 3600
x11displayoffset 10
maxauthtries 6
maxsessions 10
clientaliveinterval 0
clientalivecountmax 3
permitrootlogin yes
ignorerhosts yes
ignoreuserknownhosts no
rhostsrsaauthentication no
hostbasedauthentication no
hostbasedusesnamefrompacketonly no
rsaauthentication yes
pubkeyauthentication yes
kerberosauthentication no
kerberosorlocalpasswd yes
kerberosticketcleanup yes
gssapiauthentication yes
gssapicleanupcredentials yes
passwordauthentication yes
kbdinteractiveauthentication no
challengeresponseauthentication no
printmotd yes
printlastlog yes
x11forwarding yes
x11uselocalhost yes
strictmodes yes
tcpkeepalive yes
permitemptypasswords no
permituserenvironment no
uselogin no
compression delayed
gatewayports no
showpatchlevel no
usedns no
allowtcpforwarding yes
useprivilegeseparation yes
kerberosusekuserok yes
pidfile /var/run/sshd.pid
xauthlocation /usr/bin/xauth
authorizedkeysfile .ssh/authorized_keys
authorizedkeysfile2 .ssh/authorized_keys2
loglevel INFO
syslogfacility AUTHPRIV
hostkey /etc/ssh/ssh_host_rsa_key
hostkey /etc/ssh/ssh_host_dsa_key
acceptenv LANG
acceptenv LC_CTYPE
acceptenv LC_NUMERIC
acceptenv LC_TIME
acceptenv LC_COLLATE
acceptenv LC_MONETARY
acceptenv LC_MESSAGES
acceptenv LC_PAPER
acceptenv LC_NAME
acceptenv LC_ADDRESS
acceptenv LC_TELEPHONE
acceptenv LC_MEASUREMENT
acceptenv LC_IDENTIFICATION
acceptenv LC_ALL
acceptenv LANGUAGE
acceptenv XMODIFIERS
subsystem sftp /usr/libexec/openssh/sftp-server
maxstartups 10:30:100
permittunnel no
permitopen any

以上になります。

参考:
SSH サーバの設定