Lolik

not404

nothing
x
bilibili
github
telegram
steam
follow

公私鍵を使用してLinuxサーバーにログインする方法

一、なぜ公開鍵と秘密鍵でログインするのか#

  1. より高い安全性
  • パスワードの複雑性の問題:パスワードログインは通常、ユーザーが複雑なパスワードを覚える必要がありますが、多くの人は便利さのために簡単なパスワードを選ぶため、ブルートフォース攻撃に対して脆弱です。一方、公開鍵と秘密鍵のログインは非対称暗号技術を使用しており、秘密鍵の長さは通常長く(例えば 4096 ビット)、解読が非常に困難です。(インターネット上で 22 番ポートを公開している SSH サービスは、毎日大量のパスワード破りのログインリクエストを受けており、ログを確認すると毎日千回以上あります)
  • 中間者攻撃の防止:公開鍵と秘密鍵の認証メカニズムは、暗号化プロセス中に中間者攻撃を効果的に防ぎます。攻撃者が通信内容を傍受しても、秘密鍵やデータを解読することはできません。
  • パスワード漏洩のリスクなし:公開鍵と秘密鍵のログインプロセスでは、秘密鍵は常にローカルに保存され、パスワードログインのようにネットワークを通じて送信されないため、送信中にパスワードが傍受されるリスクはありません。
  1. より便利なログイン
  • パスワードの手動入力が不要:公開鍵と秘密鍵のログインが設定されると、ユーザーは手動でパスワードを入力することなく迅速にサーバーにログインでき、作業効率が大幅に向上します。特に頻繁にサーバーにログインするシーンに適しています。
  • 複数のサーバーをサポート:同じ公開鍵を複数のサーバーに追加でき、同じ鍵のペアを使用して複数のサーバーにログインできるため、ログインプロセスが簡素化されます。(ただし、秘密鍵ファイルが失われたり漏洩したりすると、連鎖反応が起こる可能性があります)
  • 自動化操作:公開鍵と秘密鍵のログインはパスワードなしでのログインをサポートし、自動化スクリプト操作(Python の Fabric ライブラリを使用した自動デプロイなど)を実現しやすくなります。例えば、SSH を介してリモートコマンドを実行したり、ファイルを転送したりすることができます。
  1. 拡張性が高い
  • 管理が容易:公開鍵は複数のサーバーに簡単に配布でき、秘密鍵はローカルで適切に保管するだけで済みます。鍵を変更する必要がある場合は、鍵ペアを再生成し、新しい公開鍵をサーバーにアップロードするだけです。

二、鍵ペアの生成#

公開鍵と秘密鍵でサーバーにログインするには、まず鍵ペアを生成する必要があります。ローカルコンピュータで ssh-keygen コマンドを使用して鍵ペアを生成できます。

  1. ssh-keygen コマンドには OpenSSH クライアントのインストールが必要です。

Windows 11 を例にすると、設定 > システム > オプション機能で OpenSSH クライアントを検索してインストールし、powershellを使用してインストールされているか確認します。

> gcm ssh-keygen

CommandType     Name                 Version    Source
-----------     ----                 -------    ------
Application     ssh-keygen.exe       9.5.3.1    C:\Windows\System32\OpenSSH\ssh-keygen.exe
  1. 鍵ペア生成コマンド、
ssh-keygen -t rsa -b 4096
  • -t rsa:鍵のタイプを RSA に指定します。
  • -b 4096:鍵の長さを 4096 ビットに指定します。より高い鍵の長さは、より強い安全性を意味します。

Enter を押すと、鍵を保存するファイルのパスとオプションのパスワードを入力するように求められます。パスワードが不要な場合は、Enter を押してスキップできます。

デフォルトでは、鍵は ~/.ssh/id_rsa(秘密鍵)と ~/.ssh/id_rsa.pub(公開鍵)に保存され、Windows では一般的に C:\Users\<ユーザー名>\.ssh にあります。
例えば、私の場合は

24123@lolik ~\.ssh
> ls
    ディレクトリ: C:\Users\24123\.ssh
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----         2025/2/19     10:03            210 config
-a----          2024/6/7     14:43           3381 id_rsa
-a----          2024/6/7     14:43            738 id_rsa.pub
-a----         2025/2/19      9:57           5828 known_hosts
-a----         2025/2/19      9:52           5080 known_hosts.old

known_hosts には接続したサーバーの公開鍵が保存されている可能性があります。私の config は VS Code が保存したリモート接続情報を基に作成されており、エイリアスやホスト名などが含まれています。

  1. 接続操作の簡素化

上記の config ファイルに(存在しない場合は自分で作成)例えば:

# SSH configファイルについての詳細: https://linux.die.net/man/5/ssh_config
  Host winserverA
    HostName 1.1.1.1
    User administrator
    IdentityFile ~/.ssh/id_rsa

  Host serverB
    HostName 1.1.1.1
    User root
    IdentityFile ~/.ssh/id_rsa
  • Host:サーバーにエイリアスを設定し、記憶しやすくします。

  • HostName:サーバーの IP アドレス。

  • User:サーバーのユーザー名。

  • IdentityFile:秘密鍵ファイルのパス。

    IdentityFileはデフォルトで ~/.ssh/id_rsa のようです。

    私は ssh エイリアス または ssh username@ip コマンドを使用して直接ログインでき、-i ~/.ssh/id_rsa を指定していません。

三、公開鍵をサーバーにアップロードする#

  1. 公開鍵の内容をクリップボードにコピー
cat ~/.ssh/id_rsa.pub

​ 出力内容を選択してコピーします。

  1. サーバーにログインし、パスワードまたは他の方法を使用します。

    サーバー上で、ホームディレクトリ~に .ssh ディレクトリを作成します(存在しない場合)、そして権限を変更します。

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    

    vi または vim を使用して~/.ssh/authorized_keys を作成します。

    vim  ~/.ssh/authorized_keys
    

    公開鍵を貼り付けて保存します。

  2. サーバーの SSH 設定を変更

    /etc/ssh/sshd_configファイルを編集します。

    vim /etc/ssh/sshd_config
    
    • PubkeyAuthentication yes
    • AuthorizedKeysFile .ssh/authorized_keys

​ 公開鍵認証を許可し、公開鍵ファイルを指定します。

  • PermitRootLoginprohibit-password または without-password に設定し、root ユーザーのパスワードログインを無効にし、公開鍵ログインのみを許可します。
  1. 設定を有効にするために sshd サービスを再起動します(古いコマンド service を使用することもできます)。

    sudo systemctl sshd restart
    
  2. ログインテスト

    例えば、ローカルコンピュータのターミナルで、server_ip はサーバーの IP です(上記の config でエイリアスを設定した場合は、エイリアスを使用してログインできます)。

    ssh root@server_ip          
    

    ローカルが初めてログインする場合は警告が表示され、yes を入力すればよいです。

    問題がなければ、直接サーバーにログインでき、非常に便利です。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。