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 | sshdをIPv4,IPv6,IPv4とIPv6の両方のいづれかで有効にするかを指定する。 |
・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 | X11をlocalhostのみ許可する。デフォルトは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 サーバの設定