「設定 - SSHの公開鍵認証」の版間の差分

提供: MochiuWiki : SUSE, EC, PCB

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

編集の要約なし
 
(同じ利用者による、間の13版が非表示)
5行目: 5行目:


== 公開鍵と秘密鍵の作成 ==
== 公開鍵と秘密鍵の作成 ==
==== RHEL / SUSE / Raspberry Pi ====
RHEL、SUSE、Raspbianには、標準でOpenSSHがインストールされている。<br>
<br>
秘密鍵と公開鍵を作成する。<br>
* <code>-t</code>オプション
*: 指定しない場合、RSAアルゴリズムを使用した2048ビットの鍵ペアが生成される。
*: 異なるアルゴリズム(例: ed25519)や鍵サイズを使用する場合は、<code>-t</code>(タイプ)オプションと<code>-b</code>(ビット数)オプションを指定する。
*: <br>
* <code>-f</code>オプション
*: 特定のファイル名やディレクトリで鍵ペアを保存する場合は、<code>-f</code>オプションを使用してファイル名を指定する。
*: <br>
*: 指定しない場合、生成された鍵ペアは、デフォルトでは次のファイルに保存される。
*: 公開鍵: ~/.ssh/id_rsa.pub
*: 秘密鍵: ~/.ssh/id_rsa
*: <br>
* <code>-N</code>オプション
*: パスフレーズを設定する場合、鍵生成時に対話式で設定する、または、<code>-N</code>オプションを使用して設定する。
<br>
ssh-keygen -t rsa -b 4096
# 公開鍵および秘密鍵の入力
Generating public/private rsa key pair.
Enter file in which to save the key (/home/${ユーザ名}/.ssh/id_rsa):    # 空(標準ディレクトリ)または任意のパスを入力
Enter passphrase (empty for no passphrase):                              # パスフレーズを入力(空の場合はパスフレーズ無しとなる)
Enter same passphrase again:                                              # パスフレーズを再入力
Your identification has been saved in /home/${ユーザ名}/.ssh/id_rsa.
Your public key has been saved in /home/${ユーザ名}/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:KUTA1tKak8l0ibHGqq4XWOPgRKfyRCfeBGxrWssdPoY ssh_client
The key's randomart image is:
+---[RSA 4096]----+
| ..oo*..        |
| .=oOo=          |
|.+oX+B.          |
|ooOoX.  .      |
|+%.* o. S        |
|ooE =  .        |
|.  o .          |
|. .              |
|oo              |
+----[SHA256]-----+
<br>
==== Windows ====
Windows 10には、標準でOpenSSHがインストールされているが、ここでは、TeraTermを使用する。<br>
<br>
TeraTermを起動して、[設定]-[SSH鍵生成] をクリックする。<br>
TeraTermを起動して、[設定]-[SSH鍵生成] をクリックする。<br>
[[ファイル:Raspberry-Pi-SSH-Config-01.png|フレームなし|中央]]
[[ファイル:Raspberry-Pi-SSH-Config-01.png|フレームなし|中央]]
14行目: 60行目:
[鍵のパスフレーズ]と[パスフレーズの確認]にパスワードを入力する。<br>
[鍵のパスフレーズ]と[パスフレーズの確認]にパスワードを入力する。<br>
[公開鍵の保存](id_rsa.pubファイル)と[秘密鍵の保存](id_rsaファイル)をクリックして、<br>
[公開鍵の保存](id_rsa.pubファイル)と[秘密鍵の保存](id_rsaファイル)をクリックして、<br>
それぞれの鍵をクライアントPCの任意のフォルダに保存する。<br><br>
それぞれの鍵をクライアントPCの任意のフォルダに保存する。<br>
* '''注意'''
<br>
:'''鍵のパスフレーズ無しの場合は秘密鍵だけでログインする。'''
<u>※注意</u><br>
:'''この設定完了後に秘密鍵(id_rsa)を紛失するとログイン出来なくなるため気をつけること。'''
<u>鍵のパスフレーズ無しの場合は秘密鍵だけでログインする。</u><br>
:'''また、秘密鍵が第三者に漏洩すると、ラズパイにログインされてしまうので厳重に保管すること。'''
<u>この設定完了後に秘密鍵(id_rsa)を紛失するとログイン出来なくなるため気をつけること。</u><br>
<u>また、秘密鍵が第三者に漏洩すると、ラズパイにログインされてしまうので厳重に保管すること。</u><br>
[[ファイル:Raspberry-Pi-SSH-Config-03.png|フレームなし|中央]]
[[ファイル:Raspberry-Pi-SSH-Config-03.png|フレームなし|中央]]
<br><br>
<br><br>


== 公開鍵を~/.ssh/authorized_keysに保存 ==
== 公開鍵の設定 ==
以下のコマンドを実行して、ホームディレクトリに.sshディレクトリを作成する。<br>
SSHサーバのホームディレクトリに.sshディレクトリを作成して、パーミッションを変更する。<br>
  mkdir .ssh  
  mkdir ~/.ssh
chmod 700 ~/.ssh
<br>
<br>
以下のコマンドを実行して、.sshディレクトリのパーミッションを変更する<br>
.sshディレクトリ内に、公開鍵ファイルであるauthorized_keysファイルを作成する。<br>
  chmod 700 .ssh
  touch ~/.ssh/authorized_keys
<br>
<br>
以下のコマンドを入力して、.sshディレクトリの下に公開鍵ファイルを作成して、テキストエディタで開く。<br>
上記のセクションで生成したid_rsa.pubファイル(公開鍵ファイル)の内容を、authorized_keysファイルにコピーする。<br>
クライアントPCに保存したid_rsa.pubファイルをテキストエディタで開いて全てコピーする。<br>
コピーした文字列を~/.ssh/authorized_keysファイルにペーストして保存する。<br>
  nano ~/.ssh/authorized_keys
  nano ~/.ssh/authorized_keys
または、以下のコマンドを実行してauhorizedファイルに追記することもできる。<br>
または
  cat id_rsa.pub >> ~/.ssh/authorized_keys
  cat id_rsa.pub >> ~/.ssh/authorized_keys
<br>
<br>
以下のコマンドを入力して、authorized_keysファイルのパーミッションを変更する。<br>
authorized_keysファイルのパーミッションを変更する。<br>
  chmod 600 ~/.ssh/authorized_keys
  chmod 600 ~/.ssh/authorized_keys
<br><br>
<br><br>


== rootログインの禁止 ==
== SSHの設定 ==
==== rootユーザのログインの禁止 ====
SSH接続時、rootユーザでのログインを禁止するため、以下のコマンドを実行する。<br>
SSH接続時、rootユーザでのログインを禁止するため、以下のコマンドを実行する。<br>
  sudo nano /etc/ssh/sshd_config
  sudo nano /etc/ssh/sshd_config
テキストエディタに切り替わるので、一番下に以下のコードを追加して保存する。<br>
<br>
最下行に以下の設定を追記する。<br>
  PermitRootLogin no
  PermitRootLogin no
<br><br>
<br>
 
==== 公開鍵のログインの設定 ====
== SSHの設定変更 ==
以下のコマンドを入力して、sshd_configファイルを開く。<br>
以下のコマンドを入力して、sshd_configファイルを開く。<br>
  sudo nano /etc/ssh/sshd_config
  sudo nano /etc/ssh/sshd_config
<br>
<br>
<nowiki>#</nowiki>PasswordAuthentication yesの下の行に、PasswordAuthentication noを追加して保存する。<br>
パスワード認証を不可にするため、PasswordAuthenticationをnoに変更する。<br>
[[ファイル:Raspberry-Pi-SSH-Config-04.png|フレームなし|中央]]
[[ファイル:Raspberry-Pi-SSH-Config-04.png|フレームなし|中央]]
<br>
<br>
以下のコマンドを入力して、SSHを再起動する。<br>
公開鍵認証を可能にするため、PubkeyAuthenticationをyesに変更する。<br>
<br>
設定を有効にするため、SSHを再起動する。<br>
  sudo systemctl restart sshd
  sudo systemctl restart sshd
<br>
<br>
これでパスワードログインが出来なくなり、秘密鍵を持っている人だけがログイン出来るようになる。<br>
これにより、パスワードでのログインができなくなり、秘密鍵を持っているユーザだけがログインできる。<br>
<br><br>
<br><br>


== Powershellまたはコマンドプロンプトから接続 ==
== SSH Agent ==
RLoginやTera Termを使用せずに、Powershellやコマンドプロンプトを使用してSSH接続する場合は、以下のように実行する。<br>
SSH Agentとは、公開鍵認証方式において、事前に秘密鍵を登録することにより、<code>ssh</code> コマンドの実行時に自動的に秘密鍵を適用して認証処理を行うツールである。<br>
  ssh -p ポート番号 -i 秘密鍵を保存しているフォルダパス/id_rsa ユーザ名@ホスト名(または、IPアドレス)
これにより、認証時のパスフレーズの入力は、秘密鍵の登録時に1度行うだけで済む。<br>
<br>
<u>※注意</u><br>
<u>SSH Agentに登録された秘密鍵は、エージェントが起動している間はメモリ上に保持される。</u><br>
<u>セキュリティを考慮して、使用後は適切に終了する、または、有効期限付きで鍵を登録することを推奨する。</u><br>
<br>
<u>また、共有環境や公共の端末では、SSH Agentの使用に十分注意する必要がある。</u><br>
<br>
==== SSH Agentの起動 ====
SSH Agentを使用するには、エージェントを起動する必要がある。<br>
<br>
まず、SSH Agentを起動して環境変数を設定する。<br>
eval "$(ssh-agent -s)"
<br>
起動に成功した場合は、<u>Agent pid (プロセスID)</u> が表示される。<br>
<br>
==== 秘密鍵の登録 ====
SSH Agentに秘密鍵を登録するには、<code>ssh-add</code> コマンドを使用する。<br>
ssh-add ~/.ssh/id_rsa
<br>
パスフレーズが設定されている秘密鍵の場合、登録時にパスフレーズの入力が求められる。<br>
1度登録すれば、SSH Agentが起動している間はパスフレーズの再入力は不要となる。<br>
<br>
==== ssh-addコマンド一覧 ====
下表に、<code>ssh-add</code> コマンドの使用方法を示す。<br>
<br>
<center>
{| class="wikitable" | style="background-color:#fefefe;"
|+ ssh-addコマンド
|-
! コマンド !! 意味
|-
| ssh-add <秘密鍵ファイルのパス> || 秘密鍵を登録する。
|-
| ssh-add -l || 登録されている鍵のFingerprints一覧を表示する。
|-
| ssh-add -L || 登録されている鍵の公開鍵一覧を表示する。
|-
| ssh-add -d <秘密鍵ファイルのパス> || 登録されている鍵を削除する。
|-
| ssh-add -D || 登録されている全ての鍵を削除する。
|-
| ssh-add -t <有効期限> <秘密鍵ファイルのパス> || 指定した有効期限付きで秘密鍵を登録する。(例:3600秒)
|}
</center>
<br>
==== SSH Agentの自動起動設定 ====
システム起動時に自動的にSSH Agentを起動して秘密鍵を登録する場合、使用しているシェルの設定ファイルに設定を追加する。<br>
<br>
* Bash / Zshの場合
<syntaxhighlight lang="sh">
# ~/.profileファイル または ~/.zprofileファイル等
# SSH Agentの起動
if [ -z "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa
fi
</syntaxhighlight>
<br>
* Fishの場合
<syntaxhighlight lang="fish">
# ~/.config/fish/config.fishファイル
# SSH Agentの起動
if test -z "$SSH_AUTH_SOCK"
    eval (ssh-agent -c)
    ssh-add ~/.ssh/id_rsa
end
</syntaxhighlight>
<br>
==== SSH Agentのプロセス確認と終了 ====
現在実行中のSSH Agentのプロセスを確認する。<br>
ps aux | grep ssh-agent
<br>
SSH Agentを終了する。<br>
ssh-agent -k
<br><br>
 
== ターミナル等から接続 ==
RLoginやTera Termを使用せずに、ターミナル等からSSH接続する場合は、以下のようなコマンドを実行する。<br>
  ssh -p <ポート番号> -i /<秘密鍵を保存しているディレクトリ>/id_rsa <ユーザ名>@<ホスト名またはIPアドレス>
<br>
上記のようなコマンドを簡潔に記述する場合、クライアントに~/.ssh/configファイルを作成する。<br>
vi ~/.ssh/config
# ~/.ssh/configファイル
Host <任意の名前>
    # ホスト名
    HostName <ホスト名またはIPアドレス>
    # ポート番号
    Port <ポート番号>
    # ユーザー名
    User <サーバのユーザ名>
    # 暗号鍵ファイルのパス
    IdentityFile <暗号鍵ファイルのパス>
<br>
以下のように、コマンドを簡潔に記述できる。<br>
ssh <任意の名前>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]]

2026年1月2日 (金) 15:22時点における最新版

概要

パスワードでのログインはランダムで試すことで突破されることもあるので、セキュリティを向上させるため公開鍵認証を行う。
公開鍵認証は秘密鍵を持つ人だけがログイン出来るようになる設定である。


公開鍵と秘密鍵の作成

RHEL / SUSE / Raspberry Pi

RHEL、SUSE、Raspbianには、標準でOpenSSHがインストールされている。

秘密鍵と公開鍵を作成する。

  • -tオプション
    指定しない場合、RSAアルゴリズムを使用した2048ビットの鍵ペアが生成される。
    異なるアルゴリズム(例: ed25519)や鍵サイズを使用する場合は、-t(タイプ)オプションと-b(ビット数)オプションを指定する。

  • -fオプション
    特定のファイル名やディレクトリで鍵ペアを保存する場合は、-fオプションを使用してファイル名を指定する。

    指定しない場合、生成された鍵ペアは、デフォルトでは次のファイルに保存される。
    公開鍵: ~/.ssh/id_rsa.pub
    秘密鍵: ~/.ssh/id_rsa

  • -Nオプション
    パスフレーズを設定する場合、鍵生成時に対話式で設定する、または、-Nオプションを使用して設定する。


ssh-keygen -t rsa -b 4096

# 公開鍵および秘密鍵の入力
Generating public/private rsa key pair.
Enter file in which to save the key (/home/${ユーザ名}/.ssh/id_rsa):     # 空(標準ディレクトリ)または任意のパスを入力
Enter passphrase (empty for no passphrase):                              # パスフレーズを入力(空の場合はパスフレーズ無しとなる)
Enter same passphrase again:                                              # パスフレーズを再入力
Your identification has been saved in /home/${ユーザ名}/.ssh/id_rsa.
Your public key has been saved in /home/${ユーザ名}/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:KUTA1tKak8l0ibHGqq4XWOPgRKfyRCfeBGxrWssdPoY ssh_client
The key's randomart image is:
+---[RSA 4096]----+
| ..oo*..         |
| .=oOo=          |
|.+oX+B.          |
|ooOoX.   .       |
|+%.* o. S        |
|ooE =  .         |
|.  o .           |
|. .              |
|oo               |
+----[SHA256]-----+


Windows

Windows 10には、標準でOpenSSHがインストールされているが、ここでは、TeraTermを使用する。

TeraTermを起動して、[設定]-[SSH鍵生成] をクリックする。


[鍵の種類]はRSAを選択する。
[ビット数]は2048を入力して、[生成]ボタンを押下すると、鍵を生成しましたと出力される。


[鍵のパスフレーズ]と[パスフレーズの確認]にパスワードを入力する。
[公開鍵の保存](id_rsa.pubファイル)と[秘密鍵の保存](id_rsaファイル)をクリックして、
それぞれの鍵をクライアントPCの任意のフォルダに保存する。

※注意
鍵のパスフレーズ無しの場合は秘密鍵だけでログインする。
この設定完了後に秘密鍵(id_rsa)を紛失するとログイン出来なくなるため気をつけること。
また、秘密鍵が第三者に漏洩すると、ラズパイにログインされてしまうので厳重に保管すること。



公開鍵の設定

SSHサーバのホームディレクトリに.sshディレクトリを作成して、パーミッションを変更する。

mkdir ~/.ssh 
chmod 700 ~/.ssh


.sshディレクトリ内に、公開鍵ファイルであるauthorized_keysファイルを作成する。

touch ~/.ssh/authorized_keys


上記のセクションで生成したid_rsa.pubファイル(公開鍵ファイル)の内容を、authorized_keysファイルにコピーする。

nano ~/.ssh/authorized_keys
または
cat id_rsa.pub >> ~/.ssh/authorized_keys


authorized_keysファイルのパーミッションを変更する。

chmod 600 ~/.ssh/authorized_keys



SSHの設定

rootユーザのログインの禁止

SSH接続時、rootユーザでのログインを禁止するため、以下のコマンドを実行する。

sudo nano /etc/ssh/sshd_config


最下行に以下の設定を追記する。

PermitRootLogin no


公開鍵のログインの設定

以下のコマンドを入力して、sshd_configファイルを開く。

sudo nano /etc/ssh/sshd_config


パスワード認証を不可にするため、PasswordAuthenticationをnoに変更する。


公開鍵認証を可能にするため、PubkeyAuthenticationをyesに変更する。

設定を有効にするため、SSHを再起動する。

sudo systemctl restart sshd


これにより、パスワードでのログインができなくなり、秘密鍵を持っているユーザだけがログインできる。


SSH Agent

SSH Agentとは、公開鍵認証方式において、事前に秘密鍵を登録することにより、ssh コマンドの実行時に自動的に秘密鍵を適用して認証処理を行うツールである。
これにより、認証時のパスフレーズの入力は、秘密鍵の登録時に1度行うだけで済む。

※注意
SSH Agentに登録された秘密鍵は、エージェントが起動している間はメモリ上に保持される。
セキュリティを考慮して、使用後は適切に終了する、または、有効期限付きで鍵を登録することを推奨する。

また、共有環境や公共の端末では、SSH Agentの使用に十分注意する必要がある。

SSH Agentの起動

SSH Agentを使用するには、エージェントを起動する必要がある。

まず、SSH Agentを起動して環境変数を設定する。

eval "$(ssh-agent -s)"


起動に成功した場合は、Agent pid (プロセスID) が表示される。

秘密鍵の登録

SSH Agentに秘密鍵を登録するには、ssh-add コマンドを使用する。

ssh-add ~/.ssh/id_rsa


パスフレーズが設定されている秘密鍵の場合、登録時にパスフレーズの入力が求められる。
1度登録すれば、SSH Agentが起動している間はパスフレーズの再入力は不要となる。

ssh-addコマンド一覧

下表に、ssh-add コマンドの使用方法を示す。

ssh-addコマンド
コマンド 意味
ssh-add <秘密鍵ファイルのパス> 秘密鍵を登録する。
ssh-add -l 登録されている鍵のFingerprints一覧を表示する。
ssh-add -L 登録されている鍵の公開鍵一覧を表示する。
ssh-add -d <秘密鍵ファイルのパス> 登録されている鍵を削除する。
ssh-add -D 登録されている全ての鍵を削除する。
ssh-add -t <有効期限> <秘密鍵ファイルのパス> 指定した有効期限付きで秘密鍵を登録する。(例:3600秒)


SSH Agentの自動起動設定

システム起動時に自動的にSSH Agentを起動して秘密鍵を登録する場合、使用しているシェルの設定ファイルに設定を追加する。

  • Bash / Zshの場合
 # ~/.profileファイル または ~/.zprofileファイル等
 
 # SSH Agentの起動
 if [ -z "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)"
    ssh-add ~/.ssh/id_rsa
 fi


  • Fishの場合
 # ~/.config/fish/config.fishファイル
 
 # SSH Agentの起動
 if test -z "$SSH_AUTH_SOCK"
    eval (ssh-agent -c)
    ssh-add ~/.ssh/id_rsa
 end


SSH Agentのプロセス確認と終了

現在実行中のSSH Agentのプロセスを確認する。

ps aux | grep ssh-agent


SSH Agentを終了する。

ssh-agent -k



ターミナル等から接続

RLoginやTera Termを使用せずに、ターミナル等からSSH接続する場合は、以下のようなコマンドを実行する。

ssh -p <ポート番号> -i /<秘密鍵を保存しているディレクトリ>/id_rsa <ユーザ名>@<ホスト名またはIPアドレス>


上記のようなコマンドを簡潔に記述する場合、クライアントに~/.ssh/configファイルを作成する。

vi ~/.ssh/config

# ~/.ssh/configファイル
Host <任意の名前>
   # ホスト名
   HostName <ホスト名またはIPアドレス>

   # ポート番号
   Port <ポート番号>

   # ユーザー名
   User <サーバのユーザ名>

   # 暗号鍵ファイルのパス
   IdentityFile <暗号鍵ファイルのパス>


以下のように、コマンドを簡潔に記述できる。

ssh <任意の名前>