「設定 - SSH」の版間の差分
129行目: | 129行目: | ||
| ShowPatchLevel || yes<br>no<br>デフォルトは、no || セッション確立時にクライアントにOpenSSHのパッチレベルを通知する。 | | ShowPatchLevel || yes<br>no<br>デフォルトは、no || セッション確立時にクライアントにOpenSSHのパッチレベルを通知する。 | ||
|- | |- | ||
|UseDNS | | UseDNS || yes<br>no<br>デフォルトは、yes || DNSを使用してリモートホスト名を確認する。 | ||
|yes | |||
no | |||
デフォルトは、yes | |||
|DNSを使用してリモートホスト名を確認する。 | |||
|- | |- | ||
| | | PidFile || PIDファイルのパス<br>デフォルトは、/var/run/sshd.pid || PIDファイルの出力先を指定する。 | ||
| | |||
| | |||
|- | |- | ||
| | | MaxStartups || 整数値<br>デフォルトは、10 || sshdが認証成功までの接続を受け付ける最大数を指定する。 | ||
| | |||
| | |||
|- | |- | ||
| | | PermitTunnel || yes<br>no<br>デフォルトは、no || トンネリングを許可する。 | ||
| | |||
| | |||
|- | |- | ||
| | | ChrootDirectory || chrootを行うディレクトリのパス<br>デフォルトは、none || chrootを行うディレクトリのパス名を指定する。 | ||
| | |||
| | |||
|- | |- | ||
| | | Banner || 文字列<br>デフォルトは、none || セッション確立時に表示する文字列を指定する。 | ||
| | |- | ||
| | | Subsystem || || 外部サブシステムを指定する。 | ||
|- | |||
| Match || || 条件に一致した場合の処理を指定する条件分岐を行う。 | |||
|} | |} | ||
</center> | </center> |
2022年12月2日 (金) 12:15時点における版
概要
SSHサーバを構成し、リモート端末からサーバに接続して操作できるようにする。
SSHサーバは、CentOSをMinimal Installした場合やopenSUSEを最小インストールした場合でも、標準でOpenSSHがインストールされるため、追加インストールする必要はない。
OpenSSHの設定ファイル
OpenSSHの主な設定ファイルは、以下に示す2つのファイルである。
- /etc/ssh/sshd_config
- SSH(SSHサーバ)の設定ファイル
- /etc/ssh/ssh_config
- システム共通のSSH(SSHクライアント)の設定ファイル
- ~/.ssh/config
- 各ユーザごとのSSH(SSHクライアント)の設定ファイル
- ~/.ssh/configファイルの設定が優先される。
OpenSSHの設定項目
項目 | 値 | 説明 |
---|---|---|
Port | ポート番号 | sshdが使用するポート番号 |
AddressFamily | any inet inet6 |
sshdをIPv4、IPv6、IPv4とIPv6の両方のいずれかで有効にする。 |
ListenAddress | host IPv4のIPアドレス または IPv4のIPアドレス:<ポート番号> IPv6のIPアドレス または IPv6のIPアドレス:<ポート番号> |
sshdが接続を受け付けるローカルアドレスを指定する。 Portが未指定の場合は、[Port]項目で指定したポート番号に対してListenする。 |
Protocol | 1 2 1,2 |
sshdがサポートするSSHのプロトコルバージョン。 SSH1のみを使用する場合は1、SSH2のみを使用する場合は2、 両方使用する場合は"1,2"と設定する。 |
Hostkey | SSHサーバに保存している秘密鍵のファイルのパス | SSHで使用する秘密鍵が格納されているファイルのパスを指定する。 |
KeyRegenerationInterval | 時間(秒) | SSH1では、サーバ鍵を指定した間隔ごとに自動的に再生成される。 その自動的に鍵を再生成する間隔を指定する。 |
ServerKeyBits | ビット数 | SSH1で使用されるサーバ鍵のビット数。 最小値は512で、デフォルトは1024。 |
SyslogFacility | ファシリティ名 デフォルトは、AUTH |
sshdがsyslogサーバに出力するログメッセージのファシリティ(分類)を指定する。 |
LogLevel | QUITE FATAL ERROR INFO VERBOSE DEBUG DEBUG1 DEBUG2 DEBUG3 |
sshdが出力するログのログレベルを指定する。 |
LoginGraceTime | 時間(秒) | ユーザが指定時間内にログインできない場合、サーバの接続を自動的に切断する。 |
PermitRootLogin | yes no without-password forced-commands-only |
rootでのログインを許可するかどうかを指定する。 without-passwordは、パスワードを使用したrootユーザのログインを拒否する。 forced-commands-onlyは、rootユーザの直接ログインを拒否するが、root権限を使用するコマンドのアクセスは許可する。 |
StrictModes | yes no デフォルトは、yes |
ログイン前にユーザのディレクトリやファイルのパーミッションをチェックする。 |
MaxAuthTries | 整数値 デフォルトは、6 |
認証の再試行最大数。 指定値の半数以上の認証が失敗する時、それ以降の失敗はログに記録される。 |
MaxSessions | 整数値 デフォルトは、10 |
最大同時接続数 |
RSAAuthentication | yes no |
RSA認証を有効にする。 RSA認証は、SSH1のみ有効にすることができる。 |
PubkeyAuthentication | yes no デフォルトは、yes |
公開鍵認証を許可する。 |
AuthorizedKeysFile | SSHサーバに保存されている公開鍵ファイルのパス | ユーザ認証の際に使用される公開鍵を格納しているファイル名を指定する。 絶対パス、または、ユーザのホームディレクトリからの相対パスで指定する。 |
AuthorizedKeysCommand | コマンド | 公開鍵を取得するために使用するコマンドを指定する。 |
AuthorizedKeysCommandRunAs | ユーザ名 | AuthorizedKeysCommand 項目で指定したコマンドを実行する時のユーザを指定する。
|
RhostsRSAAuthentication | yes no デフォルトは、no |
RSA認証が成功した時、rhostsや/etc/hosts.equivを使用した認証を許可する。 SSH1の場合のみ有効である。 |
HostbasedAuthentication | yes no デフォルトは、no |
公開鍵認証が成功した時、rhostsあるいは/etc/hosts.equiv認証を許可する。 (ホストベーストド認証) |
IgnoreUserKnownHosts | yes no デフォルトは、no |
RhostsRSAAuthenticationまたはHostbasedAuthenticationの各認証で、 ユーザの~/.ssh/known_hostsファイルを使用しないようにする。 |
IgnoreRhosts | yes no デフォルトは、no |
RhostsRSAAuthenticationまたはHostbasedAuthenticationの各認証で、 .rhostsおよび.shostsを使用しないようにする。 |
PasswordAuthentication | yes no デフォルトは、yes |
パスワード認証を許可する。 |
PermitEmptyPasswords | yes no デフォルトは、no |
パスワード認証を許可している時、 パスワードが空のアカウントに対してサーバがログインを許可するかどうかを指定する。 |
ChallengeResponseAuthentication | yes no デフォルトは、yes |
チャレンジレスポンス認証を許可する。 |
KerberosAuthentication | yes no デフォルトは、no |
ケルベロス認証を許可する。 |
KerberosOrLocalPasswd | yes no デフォルトは、yes |
ケルベロス認証で失敗した場合は、ローカルパスワードで認証する。 |
KerberosTicketCleanup | yes no デフォルトは、yes |
ログアウト時、ケルベロス認証用のキャッシュを自動的に削除する。 |
KerberosGetAFSToken | yes no デフォルトは、no |
ケルベロス認証で、AFSトークンを取得する。 |
KerberosUseKuserok | yes no デフォルトは、yes |
ケルベロス認証で、.k5loginファイルが存在する場合は使用する。 |
GSSAPIAuthentication | yes no デフォルトは、no |
GSSAPIベースのユーザ認証を使用する。 SSH2の場合のみ適用される。 |
GSSAPICleanupCredentials | yes no デフォルトは、yes |
ユーザがログアウトする時、その証明書キャッシュを自動的に消去する。 SSH2の場合のみ適用される。 |
GSSAPIStrictAcceptorCheck | yes no デフォルトは、yes |
GSSAPIアクセプタのチェックを厳格に行う。 |
GSSAPIKeyExchange | yes no デフォルトは、no |
GSSAPIを許可するために鍵交換を行う。 |
UsePAM | yes no デフォルトは、no |
PAM(Pluggable Authentication Module)インターフェースによる認証を許可する。 |
AcceptEnv | 環境変数 | クライアントから送信されてきた環境変数のうち、有効にするものを指定する。 |
AllowAgentForwarding | yes no デフォルトは、yes |
ssh-agentによるエージェント転送を許可する。 |
AllowTcpForwarding | yes no デフォルトは、yes |
TCP転送を許可する。 |
GatewayPorts | yes no デフォルトは、no |
ポート中継を許可する。 |
X11Forwarding | yes no デフォルトは、no |
X11転送を許可する。 |
X11DisplayOffset | 整数値 デフォルトは、10 |
X11転送をする場合に最初に使用されるディスプレイ番号。 |
X11UseLocalhost | yes no デフォルトは、yes |
X11をlocalhostのみ許可する。 |
PrintMotd | yes no デフォルトは、yes |
ログイン時に/etc/motdの内容を表示する。 |
PrintLastLog | yes no デフォルトは、yes |
ログイン時に前回ログインした日時と時刻を表示する。 |
TCPKeepAlive | yes no デフォルトは、yes |
TCPキープアライブメッセージを送信する。 |
UseLogin | yes no デフォルトは、no |
ログインでloginプログラムを使用する。 |
UsePrivilegeSeparation | yes no デフォルトは、yes |
sshdがセッションを受け付けるネットワークトラフィックを処理するためにroot権限を分離する。 |
PermitUserEnvironment | yes no デフォルトは、no |
ユーザの環境変数の変更を許可する。 |
Compression | yes no デフォルトは、delayed |
圧縮を許可する。 デフォルトでは、ユーザが認証されてから圧縮を許可する。(delayed) |
ClientAliveInterval | yes no デフォルトは、0 |
クライアントの生存チェック間隔を指定する。 デフォルトは、チェックしない。(0) |
ClientAliveCountMax | yes no デフォルトは、3 |
クライアントの生存チェック最大カウント数を指定する。 |
ShowPatchLevel | yes no デフォルトは、no |
セッション確立時にクライアントにOpenSSHのパッチレベルを通知する。 |
UseDNS | yes no デフォルトは、yes |
DNSを使用してリモートホスト名を確認する。 |
PidFile | PIDファイルのパス デフォルトは、/var/run/sshd.pid |
PIDファイルの出力先を指定する。 |
MaxStartups | 整数値 デフォルトは、10 |
sshdが認証成功までの接続を受け付ける最大数を指定する。 |
PermitTunnel | yes no デフォルトは、no |
トンネリングを許可する。 |
ChrootDirectory | chrootを行うディレクトリのパス デフォルトは、none |
chrootを行うディレクトリのパス名を指定する。 |
Banner | 文字列 デフォルトは、none |
セッション確立時に表示する文字列を指定する。 |
Subsystem | 外部サブシステムを指定する。 | |
Match | 条件に一致した場合の処理を指定する条件分岐を行う。 |
OpenSSHのパスワード認証
CentOSおよびSUSEでは、SSHは標準で自動起動設定になっているため、パスワード認証方式でのログインが可能となっている。
したがって、最低限必要な設定として、セキュリティを考慮して以下に示すようにrootアカウントの直接ログインの禁止設定を実施しておけばよい。
まず、SSHの設定を行う。
sudo nano /etc/ssh/sshd_config PermitRootLogin no # コメントを解除(rootログイン禁止)
次に、上記で行ったSSHの設定を反映させるため、sshdを再起動する。
sudo systemctl restart sshd
もし、Firewalldを有効にしている場合は、SSHサービスの許可が必要である。
なお、ポート番号の変更をしていない場合、SSHのポートはTCP 22番である。
sudo firewall-cmd --permanent --add-service=ssh
Firewalldの設定を反映させるため、Firewalldを再起動する。
sudo firewall-cmd --reload
SSHのポート番号の変更
SSH接続ではデフォルトでポート番号22を使用している。
以下のコマンドを実行し、ポート番号の変更を行う。
Port 22と記載している箇所が存在するので、ポート番号49152 - 65535の間のポート番号に変更して保存する。
sudo nano /etc/ssh/sshd_config
次に、上記で行ったSSHの設定を反映させるため、sshdを再起動する。
sudo systemctl restart sshd
Firewalldを有効にしている場合は、SSHサービスのポート番号を開放する。
sudo firewall-cmd --permanent --add-port=<変更したSSHのポート番号>/tcp
Firewalldの設定を反映させるため、Firewalldを再起動する。
sudo firewall-cmd --reload
SSH接続中のサスペンドの無効化
GNOME / KDE
SSH接続されているPCは無操作状態とみなされて、サスペンドの設定をしている場合、所定の時間が経過するとサスペンドされる。
そのため、SSH接続中のユーザが存在する時はサスペンドしないように設定する必要がある。
まず、/usr/lib/systemd/systemディレクトリにsystemdユニットファイルを作成する。
これは、スリープフックと呼ばれるものであり、スリープまたはハイバネートする前にExecStart
で指定したコマンドが実行される。
まず、who
コマンドを実行することにより、SSH接続中のユーザが存在するかどうか確認する。
もし、SSH接続中のユーザが存在する場合は、終了コードを0以外にして後続処理を動作させないようにする。
sudo vi /usr/lib/systemd/system/inhibit-sleep.service
# /usr/lib/systemd/system/inhibit-sleep.serviceファイル [Unit] Description=Inhibit sleep when ssh logged Before=sleep.target [Service] Type=oneshot ExecStart=/usr/bin/sh -c '! who | grep -q "(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\})"' [Install] RequiredBy=sleep.target
以下のシンボリックリンクを作成する。
sudo ln -s /usr/lib/systemd/system/inhibit-sleep.service /etc/systemd/system/
コマンドでsystemdユニットファイルを有効にするため、以下のコマンドを実行する。
sudo systemctl enable inhibit-sleep.service
動作確認するには、システムログを確認する。
サスペンドした場合はReached target Sleep.
、サスペンドから復帰した場合はStopped target Sleep.
と表示される。
sudo journalctl -f -usleep.target
GNOME
ソフトウェアの使用中にも関わらず、スクリーンセーバーまたはサスペンドが作動するものがある。
このような場合、gnome-session-inhibitツールを使用して、サスペンド等を防止する。
これを行うには、~/.bashrcファイル等の最下行に以下の設定を追記する。
if [[ -n $SSH_CONNECTION ]]; then
: $(gnome-session-inhibit --inhibit suspend --reason "SSH connection is active" --inhibit-only) &
fi
SSHPassのインストール
SSHPass(Non-interactive SSH Password Authentication)を使用すると、コマンドにてssh接続のパスワードを指定することができるので、
sshコマンドと合わせて1行でSSH接続できるようになる。
パッケージ管理システムを使用してインストール
# CentOS sudo yum install epel-release sudo yum update sudo yum install sshpass # SUSE sudo zypper install sshpass
ソースコードからインストール
SourceForgeのWebサイトからSSHPassのソースコードをダウンロードする。
https://sourceforge.net/projects/sshpass/
ダウンロードしたファイルを解凍して、任意のディレクトリに移動する。(ここでは、sshpassというディレクトリとする)
tar xf sshpass-<バージョン> cd ~/sshpass-<バージョン>
ビルドディレクトリを作成する。
mkdir build && cd build
SSHPassをビルドおよびインストールする。
../configure --prefix=<SSHPassのインストールディレクトリ> make -j $(nproc) make install
.profileファイル等に環境変数PATH
を追加する。
export PATH="$HOME/SSHPass/bin:$PATH"
確認
以下のコマンドを実行して、SSHPassが正常にインストールできたか確認する。
sshpass -V
使用方法
SSHPassを使用して、パスワードを指定する例を示す。
ただし、初回のログインにおいて、使用できない場合があるので注意すること。
sshpass -p <パスワード> ssh <ユーザ名>@<ホスト名またはIPアドレス>