LoginSignup
9
8

More than 3 years have passed since last update.

今さらながらのSSH纏め

Last updated at Posted at 2020-12-15

sshd_config

sshd_config 設定項目
Port SSHで使うポート番号、基本22
Protocol バージョン、今は2系
ListenAddress 接続を受け付けるアドレス
HostKey ホスト鍵ファイルのパス
syslogFacility ログのファシリティ
LogLevel ログのプライオリティ
LoginGraceTime ログインを試みることのできる接続時間
PermitRootLogin rootログインの許可/禁止
StrictModes パーミッションを厳密にチェックするかどうか
MaxAuthTries 認証を試みることのできる最大回数
PubkeyAuthentication 公開鍵認証を許可するかどうか
AuthorizedKeysFile 公開鍵を登録するファイル
PasswordAuthentication パスワード認証の有効/無効
PermitEmptyPasswords 空パスワードの有効/無効
UsePAM PAMを使用する
X11Forwarding X11フォワーディングの有効/無効
AllowUsers ログインを許可するユーザー
DenyUsers ログインを拒否するユーザー
AllowGroups ログインを許可するグループ
DenyGroups ログインを拒否するグループ
Subsystem 外部システムを指定
IgnoreRhosts 認証を行わずに無条件にログインできるホスト・ユーザを設定可能にする
Match Group:特定グループのSSH接続設定
Host:特定の接続元IPアドレスのSSH接続設定
LocalAddress:特的のLISTENするIPアドレスのSSH接続設定
LocalPort:特定の接続先ポート番号のSSH接続設定

ホスト認証とユーザー認証

ホスト認証

  • 公開鍵暗号方式を用いて、ホストの正当性を確認する。
  • 公開鍵暗号方式では、公開鍵と秘密鍵のペアを使って認証を行います。
  • OpenSSHをインストールすると、ローカルホスト用の公開鍵と秘密鍵が作成されます。
  • 秘密鍵は外部に漏れないように管理してください。(アクセス権は、所有者であるrootのみ読み書き可能となっています。)

  • ホストの公開鍵と秘密鍵はユニークなものです。

  • SSHでの接続ごとに、ホストの公開鍵(ホスト鍵)がクライアントへ送信されます。

  • クライアントは、所属しているホスト鍵と一致するかどうか確認することで、ホストに正当性を確認でできます。

  • ホスト鍵は~/.ssh/known_hosts に格納されます。

  • 初回接続時には、~/.ssh/known_hosts にはホスト鍵が登録されていないため、登録するメッセージが表示され、ホスト鍵が登録されます。

  • あらかじめサーバー管理者より鍵のフィンガープリントを入手しておけば、本物であるかどうか確認できます。

# ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub
256 SHA256:g4M/xzp2OxkFk9Ym9EGhNV+S7x6tTW6aaVg1V7IgF0g no comment (ECDSA)
  • 次回以降は、接続先ホストから送られてきたホスト鍵を known_hosts内の鍵と比較し、問題がなければ、ユーザー認証に進みます。

公開鍵認証

  • ホスト認証を終えると、次にユーザー認証に進みます。
  • ユーザー認証はまず公開鍵認証が試されます。
  • 公開鍵認証は、一組の公開鍵と秘密鍵を使います。
  • 公開鍵で暗号化したデータは、ペアとなる秘密鍵でのみ復号できます。
  • 秘密鍵となる電子署名は、ペアとなる公開鍵で検証できます。

公開鍵と秘密鍵のペアを ssh-keygen で作成します。

# ssh-keygen -t rsa

次に、ユーザーの公開鍵ファイルを接続先ホストの ~/.ssh/authorized_keygen に登録します。
鍵ファイルはあらかじめ、scp などで転送しておきます。(ssh-copy-id を使うと、簡単に公開鍵を接続先ホストに登録できます。)

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

SSHで接続します。

$ ssh testuser@server.naata.com

セキュリテイ

パスワード認証の禁止

PasswordAuthentication no

rootログインの禁止

PermitRootLogin no

ログインユーザーの制限

※指定しなかったユーザーは全て禁止となります。

AllowUsers testuser

無条件にログインできるホスト・ユーザの禁止

IgnoreRhosts no

ポートフォワーディング

オプション 説明
-L ローカルからリモートへポート転送する
-R リモートからローカルへポート転送する
-N コマンドを実行せず、ポート転送のみ行う
-f sshをバックグランドとして実行する
-g ポート転送するとき、ローカルホスト以外からも転送元ポートを利用できるようにする

sshポートフォワーディング
SSHポートフォワーディングを知った話

設定例

  • サーバー  server.naata.com(192.168.250.100) user01
  • クライアント client.naata.com(192.168.250.200) user02
sshd.config

Port 22
ListenAddress 0.0.0.0

HostKey /etc/ssh/ssh_host_key
HostKey /etc/ssh/ssh_host_key_rsa_key   
HostKey /etc/ssh/ssh_host_key_dsa_key

SyslogFacility  AUTHPRIV
LogLevel INFO

LoginGraceTime 2m
PermitRootLogin no
StricModes yes
MaxAuthTries 6

#公開鍵認証
PubkeyAuthentication    yes
AuthorizedKeysFile  .ssh/authorized_keys

#パスワード認証
PasswordAuthentication yes
PermitEmptyPasswords    no

UsePAM yes
X11Forwarding   yes

パスワード認証でログインしてみる。
なお、空パスワードでの認証は no なので、パスワードは必須である。
host名でアクセスを設定する 場合も参照。

$ ssh user01@192.168.250.100
もしくは
$ ssh user01@server.naata.com

公開鍵認証をやってみる。
まず、クライアント側で公開鍵と秘密鍵を作成します。

$ ssh-keygen -t rsa

公開鍵をサーバー側へコピーする。

$ ssh-copy-id -i .ssh/id_rsa.pub user01@server.naata.com

秘密鍵を使って、ログインをしてみる。

$ ssh -i id_rsa nginx-usero1@server.naata.com

また、.ssh/config 使って簡単に接続できるようになるので、↓の記事も参考になります。
~/.ssh/configについて

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8