「設定 - SSH」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
13行目: 13行目:
*: 各ユーザごとのSSH(SSHクライアント)の設定ファイル
*: 各ユーザごとのSSH(SSHクライアント)の設定ファイル
*: ~/.ssh/configファイルの設定が優先される。
*: ~/.ssh/configファイルの設定が優先される。
<br><br>
== OpenSSHの設定項目 ==
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|-
! style="background-color:#66CCFF;" | 項目
! style="background-color:#66CCFF;" | 値
! style="background-color:#66CCFF;" | 説明
|-
| Port || ポート番号 || sshdが使用するポート番号
|-
| AddressFamily || any<br>inet<br>inet6 || sshdをIPv4、IPv6、IPv4とIPv6の両方のいずれかで有効にする。
|-
| ListenAddress || host<br>IPv4のIPアドレス または IPv4のIPアドレス:<ポート番号><br>IPv6のIPアドレス または IPv6のIPアドレス:<ポート番号> || sshdが接続を受け付けるローカルアドレスを指定する。<br>Portが未指定の場合は、[Port]項目で指定したポート番号に対してListenする。
|-
| Protocol || 1<br>2<br>1,2 || sshdがサポートするSSHのプロトコルバージョン。<br>SSH1のみを使用する場合は1、SSH2のみを使用する場合は2、<br>両方使用する場合は"1,2"と設定する。
|-
| Hostkey || SSHサーバに保存している秘密鍵のファイルのパス || SSHで使用する秘密鍵が格納されているファイルのパスを指定する。
|-
| KeyRegenerationInterval || 時間(秒) || SSH1では、サーバ鍵を指定した間隔ごとに自動的に再生成される。<Br>その自動的に鍵を再生成する間隔を指定する。
|-
| ServerKeyBits || ビット数 || SSH1で使用されるサーバ鍵のビット数。<br>最小値は512で、デフォルトは1024。
|-
| SyslogFacility || ファシリティ名<br>デフォルトは、AUTH || sshdがsyslogサーバに出力するログメッセージのファシリティ(分類)を指定する。
|-
| LogLevel || QUITE<br>FATAL<br>ERROR<br>INFO<br>VERBOSE<br>DEBUG<br>DEBUG1<br>DEBUG2<br>DEBUG3 || sshdが出力するログのログレベルを指定する。
|-
| LoginGraceTime || 時間(秒) || ユーザが指定時間内にログインできない場合、サーバの接続を自動的に切断する。
|-
| PermitRootLogin || yes<br>no || rootでのログインを許可するかどうかを指定する。
|}
</center>
<br><br>
<br><br>



2022年12月2日 (金) 10:37時点における版

概要

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
rootでのログインを許可するかどうかを指定する。



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アドレス>