SSHサーバー

導入

SSH のアーキテクチャはサーバー/クライアント モードであり、両端で実行されるソフトウェアが異なります。 OpenSSH のクライアント ソフトウェアは ssh、サーバー ソフトウェアは sshd です。この章では、sshdに関するさまざまな知識を紹介します。

sshd がインストールされていない場合は、次のコマンドでインストールできます。

# Debian
$ sudo aptitude install openssh-server

# Red Hat
$ sudo yum install openssh-server

通常、sshd はインストール後にシステムとともに起動します。 sshd が現在起動していない場合は、次のコマンドを使用して起動できます。

$ sshd

上記のコマンドを実行後、sshd の再実行には絶対パスでの実行が必要ですというプロンプトが表示された場合は、絶対パスを使用して開始する必要があります。これは、誰かがさまざまな目的で実際の sshd の代わりに $PATH 変数が指すディレクトリに同じ名前のソフトウェアを配置するのを防ぐためです。

# Centos、Ubuntu、OS X
$ /usr/sbin/sshd

上記のコマンドを実行すると、sshd は自動的にバックグラウンドに移行するため、コマンドの後に&を追加する必要はありません。

sshd は、実行可能ファイルを直接実行するだけでなく、Systemd を通じて起動することもできます。

# 起動する
$ sudo systemctl start sshd.service

# 停止
$ sudo systemctl stop sshd.service

# 再起動
$ sudo systemctl restart sshd.service

次のコマンドを実行すると、次回コンピュータを起動したときに sshd が自動的に実行されます。

$ sudo systemctl enable sshd.service

sshd 構成ファイル

sshd の設定ファイルは /etc/ssh ディレクトリにあります。主な設定ファイルは sshd_config であり、インストール中にいくつかのキーも生成されます。

  • /etc/ssh/sshd_config: 設定ファイル
  • /etc/ssh/ssh_host_ecdsa_key: ECDSA 秘密鍵。
  • /etc/ssh/ssh_host_ecdsa_key.pub: ECDSA 公開鍵。
  • /etc/ssh/ssh_host_key: SSH 1 プロトコル バージョンの RSA 秘密キー。
  • /etc/ssh/ssh_host_key.pub: SSH 1 プロトコル バージョンの RSA 公開キー。
  • /etc/ssh/ssh_host_rsa_key: SSH 2 プロトコル バージョンの RSA 秘密キー。
  • /etc/ssh/ssh_host_rsa_key.pub: SSH 2 プロトコル バージョンの RSA 公開キー。
  • /etc/pam.d/sshd: PAM 設定ファイル。

sshd を再インストールすると、上記のキーが再生成され、ssh サーバーに再接続するときにクライアントに警告がポップアップ表示され、接続が拒否されることに注意してください。この状況を回避するには、sshd を再インストールするときに/etc/sshディレクトリをバックアップし、再インストール後にこのディレクトリを復元します。

設定ファイルsshd_configの形式は、各コマンドが 1 行を占めます。各行には構成項目とそれに対応する値が含まれており、構成項目は大文字と小文字が区別されず、値とスペースで区切られます。

Port 2034

上記設定コマンドは、設定項目Portの値が2034であることを指定しています。 ポートポートと書くこともできます。

構成ファイルには別の形式があります。これは、構成項目と値の間に等号があり、等号の前後のスペースはオプションです。

Port = 2034

設定ファイル内で#で始まる行はコメントを示します。

# これはコメント行です

コメントは行の先頭にのみ配置でき、行末には配置できないことに注意してください。

Port 2034 # ここではコメントできません

上の書き込みは間違っています。

また、空行はコメントに相当します。

sshd は起動時にデフォルトの構成ファイルを自動的に読み取ります。他の設定ファイルを使用したい場合は、sshd コマンドの -f パラメータで指定できます。

$ sshd -f /usr/local/ssh/my_config

上記のコマンドは、sshd が別の構成ファイル my_config を使用するように指定しています。

構成ファイルを変更した後、sshd コマンドの-t (テスト) を使用して、構文エラーがあるかどうかを確認できます。

$ sshd -t

構成ファイルを変更しても、自動的には有効にならないため、sshd を再起動する必要があります。

$ sudo systemctl restart sshd.service

sshd キー

sshd には独自のキー ペアがあります。秘密鍵を使用してクライアントに身元を証明します。すべてのキーは、公開キーと秘密キーのペアで表示されます。公開キーのファイル名は、通常、秘密キーのファイル名に接尾辞 .pub を付けたものになります。

DSA 形式の鍵ファイルのデフォルトは /etc/ssh/ssh_host_dsa_key (公開鍵は ssh_host_dsa_key.pub)、RSA 形式の鍵ファイルは /etc/ssh/ssh_host_rsa_key (公開鍵は ssh_host_rsa_key.pub )。 SSH 1 プロトコルをサポートする必要がある場合は、キー /etc/ssh/ssh_host_key が必要です。

キーがデフォルト ファイルでない場合は、設定ファイル sshd_configHostKey 設定項目を通じて指定できます。デフォルトキーのHostKey設定は以下の通りです。

# 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_ke

上記のコマンドの前の # は、これらの行がコメントであることを示します。これはデフォルト値であり、これらの行が存在するかどうかに関係なく同じです。

キーを変更する場合は、行頭の#を削除して別のキーを指定します。

HostKey /usr/local/ssh/my_dsa_key
HostKey /usr/local/ssh/my_rsa_key
HostKey /usr/local/ssh/my_old_ssh1_key

sshd 構成項目

/etc/ssh/sshd_config ファイルの設定項目は以下のとおりです。

AcceptEnv

AcceptEnv は、SendEnv コマンドを通じてクライアントからどの環境変数を受け入れることができるかを指定します。つまり、クライアントは変数名を区切るのにスペースを使用できます (AcceptEnv PATH TERM)。 。

許可グループ

AllowGroups は、ログインを許可するユーザー グループを指定します (AllowGroups groupName、複数のグループはスペースで区切られます。この項目が使用されない場合、すべてのユーザー グループがログインを許可されます。

許可ユーザー

AllowUsersは、ログインを許可するユーザーを指定します。ユーザー名を区切るにはスペースを使用します (AllowUsers user1 user2)。ユーザー名はワイルドカードをサポートしています。使用しない場合は、すべてのユーザーにログインが許可されます。この項目では、ユーザー名@ドメイン名という形式を使用することもできます (AllowUsers jones@example.comなど)。

TcpForwarding を許可

AllowTcpForwardingはポート転送を許可するかどうかを指定します。デフォルト値はyesAllowTcpForwarding yes)です。localはローカル ポート転送のみが許可されることを意味し、remoteはリモート ポート転送のみが許可されることを意味します。

承認されたキーファイル

AuthorizedKeysFile は、ユーザーの公開鍵が保存されるディレクトリを指定します。デフォルトは、ユーザーのホーム ディレクトリ内の ssh/authorized_keys ディレクトリ (AuthorizedKeysFile .ssh/authorized_keys) です。

バナー

Banner は、ログイン後に sshd によってユーザーに表示される情報ファイル (Banner /usr/local/etc/warning.txt) を指定します。デフォルトでは、コンテンツは表示されません。

チャレンジレスポンス認証

ChallengeResponseAuthentication は、キーボード インタラクティブ認証方式を使用するかどうかを指定します。デフォルト値は yes (ChallengeResponseAuthentication yes) です。

理論的には、キーボードインタラクティブ認証方式ではユーザーに複数の質問をすることができますが、実際には、通常、ユーザーはパスワードのみを求められます。パスワードベースの認証を完全に無効にしたい場合は、PasswordAuthenticationChallengeResponseAuthenticationの両方をnoに設定します。

暗号

Ciphersは、sshd が受け入れることができる暗号化アルゴリズム (Ciphers 3des-cbc) を指定します。複数のアルゴリズムを区切るにはカンマを使用します。

ClientAliveCountMax

ClientAliveCountMax は、接続が確立された後にクライアントが応答を失った (指定された時間を超えてメッセージが受信されなかった) 場合に、サーバーが接続 (メッセージの送信) を試行する回数を指定します (ClientAliveCountMax 8)。

ClientAliveInterval

ClientAliveInterval は、クライアントがアイドル状態でいられる時間を秒単位で指定します (ClientAliveInterval 180)。この時間が経過すると、サーバーはクライアントからの応答を要求するメッセージを送信します。 0の場合は、クライアントにメッセージが送信されないこと、つまり接続が自動的に切断されないことを意味します。

圧縮

圧縮は、クライアントとサーバー間のデータ送信を圧縮するかどうかを指定します。デフォルト値はyes圧縮はい)です。

グループの拒否

DenyGroups は、ログインを許可しないユーザー グループ (DenyGroups groupName) を指定します。

ユーザーを拒否

DenyUsers は、ログインを許可されないユーザーを指定します (DenyUsers user1)。スペースを使用してユーザー名を区切ります。複数行の DenyUsers コマンドを使用して指定することもできます。

ファシストロギング

SSH バージョン 1 に特別で、すべてのデバッグ情報を出力するログを指定します (FascistLogging yes)。

ホストキー

HostKey は sshd サーバーのキーを指定します。詳細については、前の記事を参照してください。

KeyRegenerationInterval

KeyRegenerationIntervalは、SSH バージョン 1 の鍵の再生成間隔を秒単位で指定します。デフォルトは 3600 秒 (KeyRegenerationInterval 3600) です。

リッスンアドレス

ListenAddress は、sshd がリッスンするローカル IP アドレス、つまり sshd によって有効になる IP アドレスを指定します。デフォルトは 0.0.0.0 (ListenAddress 0.0.0.0) で、ローカルのすべてのネットワーク インターフェイスで有効になることを意味します。機械。特定のネットワーク インターフェイス (ListenAddress 192.168.10.23など) でのみ有効にするように変更したり、ドメイン名を指定して有効にすることもできます (ListenAddress server.example.comなど)。

指定した複数の IP アドレスをリッスンする場合は、複数行の ListenAddress コマンドを使用できます。

リッスンアドレス 172.16.1.1
リッスンアドレス 192.168.0.1

ログイン猶予時間

LoginGraceTime は、ログイン時にクライアントがアイドル状態でいられる最大時間を指定します。たとえば、ユーザーがパスワードの入力に失敗した場合、接続は自動的に切断されます (秒単位) (LoginGraceTime 60)。 0に設定すると、制限がないことを意味します。

ログレベル

LogLevel は、ログの詳細レベルを指定します。指定可能な値は、QUIETFATALERRORINFOVERBOSEDEBUGDEBUG1DEBUG2です。 DEBUG3、デフォルトは INFO (LogLevel INFO) です。

MAC

MACsは、sshd が受け入れることができるデータ検証アルゴリズム (MACs hmac-sha1) を指定します。複数のアルゴリズムを区切るにはコンマを使用します。

MaxAuthTries

MaxAuthTriesは、許可される SSH ログイン試行の最大回数を指定します (MaxAuthTries 3)。パスワードが指定された回数だけ間違って入力されると、SSH 接続が閉じられます。

MaxStartups

MaxStartups は、同時に許可される同時 SSH 接続の数 (MaxStartups) を指定します。 0に設定すると、制限がないことを意味します。

この属性は、MaxStartups 10:50:20などのA:B:Cの形式に設定することもできます。これは、同時接続が 10 に達した場合、後続の接続は 50% の確率で拒否されることを意味します。 ; 20 に達すると、同時接続は 100% 拒否されます。

パスワード認証

PasswordAuthentication は、パスワード ログインを許可するかどうかを指定します。デフォルト値は yes (PasswordAuthentication yes) です。これを no (パスワード ログインを無効にし、キー ログインのみを許可します) に変更することをお勧めします。

空のパスワードを許可

PermitEmptyPasswordsは、空のパスワードによるログインを許可するかどうか、つまりユーザーのパスワードを空にすることができるかどうかを指定します。デフォルトはyesです (PermitEmptyPasswords yes)。これをno(ログインを禁止します) に変更することをお勧めします。パスワードなしで)。

RootLogin を許可

PermitRootLogin は、root ユーザーのログインを許可するかどうかを指定します。デフォルトは yes (PermitRootLogin yes) です。これを no (root ユーザーのログインを禁止) に変更することをお勧めします。

別の記述方法は、prohibit-passwordとして記述することです。これは、root ユーザーはパスワードを使用してログインすることはできませんが、キーを使用してログインできることを意味します。

PermitRootLogin 禁止パスワード

PermitUserEnvironment

PermitUserEnvironment は、sshd がクライアントの ~/.ssh/environment ファイルおよび ~/.ssh/authorized_keys ファイル内の environment= options 環境変数設定をロードできるようにするかどうかを指定します。デフォルト値はnoPermitUserEnvironment no)です。

ポート

ポートは、sshd がリッスンするポート、つまりクライアントが接続するポートを指定します。デフォルトは 22 (ポート 22) です。セキュリティ上の理由から、このポートは変更できます (ポート 8822など)。

設定ファイルでは、複数のPortコマンドを使用して、複数のポートを同時にリッスンできます。

Port 22
Port 80
Port 443
Port 8080

上記の例は、4 つのポートを同時に監視することを示しています。

PrintMotd

PrintMotd は、ログイン後にシステムの motd (今日のメッセージ) 情報ファイル /etc/motd をユーザーに表示するかどうかを指定します。このファイルは、システムのメンテナンス時間やセキュリティの問題など、重要な事項をすべてのユーザーに通知するために使用されます。デフォルト値は yes (PrintMotd yes) です。通常、シェルはこの情報ファイルを表示するため、ここでは no に変更できます。

PrintLastLog

PrintLastLog は、最後のユーザー ログイン時刻を印刷するかどうかを指定します。デフォルト値は yes (PrintLastLog yes) です。

プロトコル

プロトコルは、sshd で使用されるプロトコルを指定します。 プロトコル 1は SSH 1 プロトコルを使用することを意味します。これをプロトコル 2(SSH 2 プロトコルを使用) に変更することをお勧めします。 プロトコル 2,1は、両方のバージョンのプロトコルをサポートすることを意味します。

公開鍵認証

PubkeyAuthentication は、公開鍵ログインを許可するかどうかを指定します。デフォルト値は yes (PubkeyAuthentication yes) です。

Quietモード

SSH バージョン 1 に限定され、致命的なエラー メッセージのみをログに出力するように指定します (QuietMo​​de yes)。

RSA認証

RSAAuthentication は RSA 認証を許可するように指定します。デフォルト値は yes (RSAAuthentication yes) です。

サーバーキービット

ServerKeyBits は、SSH バージョン 1 のキーを再生成するときのビット数を指定します。デフォルトは 768 (ServerKeyBits 768) です。

厳密モード

StrictModes は、sshd が一部の重要なファイルおよびディレクトリに対するユーザーのアクセス許可をチェックするかどうかを指定します。デフォルトはyes (StrictModes yes) です。つまり、ユーザーの SSH 構成ファイル、鍵ファイル、およびディレクトリーに対して、SSH では所有者が root ユーザーまたはユーザー自身である必要があり、ユーザーの書き込み権限が必要です。グループなどはオフにする必要があります。

SyslogFacility

SyslogFacility は、Syslog が sshd ログを処理する方法を指定します。デフォルトは Auth (SyslogFacility AUTH) です。

TCPキープアライブ

TCPKeepAlive は、システムが TCP キープアライブ メッセージをクライアントに送信するかどうかを指定します (TCPKeepAlive yes)。

DNS を使用する

UseDNSは、ユーザーが SSH 経由でドメイン名にログインするときにサーバーが DNS を使用するかどうかを指定し、ドメイン名に対応する IP アドレスにローカル マシンが含まれていることを確認します (UseDNS yes)。このオプションをオンにしてもあまり意味がなく、DNSの更新が間に合わないと誤判定が起こる可能性があるため、オフにすることを推奨します。

ログインを使用

UseLogin は、ユーザー認証に SSH ツールの代わりに /usr/bin/login を内部的に使用するかどうかを指定します。デフォルトは no (UseLogin no) です。

UserPrivilegeSeparation

UserPrivilegeSeparationは、ユーザーが認証された後、別のサブスレッドを使用してユーザー権限関連の操作を処理することを指定します。これは、セキュリティの向上に役立ちます。デフォルト値はyes (UsePrivilegeSeparation yes) です。

VerboseMode

SSH 2 バージョンに特別で、ログ出力の詳細なデバッグ情報を指定します (VerboseMode yes)。

X11転送

X11Forwarding は、X ウィンドウ転送をオンにするかどうかを指定します。デフォルト値は no (X11Forwarding no) です。

構成ファイルを変更した後、次のコマンドを使用して、構成ファイルに構文エラーがあるかどうかを確認できます。

$ sshd -t

新しい構成ファイルを有効にするには、sshd を再起動する必要があります。

$ sudo systemctl restart sshd

sshdのコマンドライン設定項目

sshd コマンドにはいくつかの設定項目があります。これらの構成項目は呼び出し時に指定され、構成ファイルの設定をオーバーライドできます。

(1)-d

-d パラメータはデバッグ情報を表示するために使用されます。

$ sshd -d

(2)-D

-D パラメータは、sshd がバックグラウンド デーモンとして実行されないことを指定します。

$ sshd -D

(3)-え

-eパラメータは、sshd によってシステム ログ syslog に書き込まれた内容を標準エラーに送信します。

(4)-f

-f パラメータは設定ファイルの場所を指定します。

(5)-h

-h パラメータはキーを指定するために使用されます。

$ sshd -h /usr/local/ssh/my_rsa_key

(6)-o

-o パラメータは、設定ファイル内の設定項目と対応する値を指定します。

$ sshd -o "Port 2034"

設定項目とそれに対応する値の間には等号を使用できます。

$ sshd -o "Port = 2034"

等号の前後のスペースを省略した場合は、引用符を使用することもできます。

$ sshd -o Port=2034

-oパラメータを一緒に使用して、複数の構成キーワードを指定できます。

(7)-p

-p パラメータは sshd のサービス ポートを指定します。

$ sshd -p 2034

上記のコマンドは、sshd がポート2034で開始されることを指定します。

-p パラメータは複数のポートを指定できます。

$ sshd -p 2222 -p 3333

(8)-t

-t パラメータは、設定ファイルの構文が正しいかどうかをチェックします。


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0