Closed4

sshをざっくり深ぼる

ハガユウキハガユウキ

WHY(なぜSSHは存在するのか)

SSHが存在する理由は、SSHを利用することで、物理的に離れたサーバーに遠隔から安全にアクセスすることができるからだと個人的には思う。本番環境でスクリプト実行したい時とかに、SSHでリモートホストのシェルにログインしたりできるから楽。

WHAT(SSHとは何か)

  • SSHとは、リモートホストのシェルを操作するためのプロトコルである。
    • SSHは、TCP/IPモデルでいうアプリケーション層のプロトコルである。
  • SSHプロトコルを実装したソフトウェアもSSHと呼ばれたりする。
    • 本当はSSHプロトコルを実装したソフトウェアはOpenSSHであって、macではOpenSSHを使っている。
      • OpenSSHはsshサーバー(sshd)とsshクライアントを提供する。

HOW(リモートホストのシェル操作をどのように実現しているのか)

  • SSHクライアントを実行してリモートホストのシェルにログインする。その際に、公開鍵認証 or パスワード認証を使って認証する。認証後はリモートホストのシェルを操作できる
ハガユウキハガユウキ

SSHにおける公開鍵認証のメリットデメリット

メリット

  • 公開鍵をサーバーに登録したユーザーしかシェルログインできないので、セキュリティ的に安全。
    • 秘密鍵が流出する可能性は低いがパスワードが流出する可能性は高い。なのでパスワード認証よりは安全。

デメリット

  • 公開鍵を登録するのがめんどくさい。
ハガユウキハガユウキ

SSHにおける公開鍵認証のざっくりとしたフロー

  1. クライアント側でssh-keygenコマンドを使ってsshで用いる公開鍵と秘密鍵を生成する。
  2. 公開鍵をサーバー管理者に共有して、サーバーに公開鍵を登録してもらう。
  3. sshクライアントを実行して、リモートホストのシェルにログインする。この際にユーザー情報と秘密鍵を用いて署名を作成して、署名のデータとユーザー情報をリモートホストに送信する。
  4. サーバー側では登録されている公開鍵で署名データからユーザー情報を生成する(別の秘密鍵を使って作成した署名なら、公開鍵で署名データからユーザー情報を生成する際におかしな情報が生成される。故に絶対にユーザー情報が一致しないからログインできない。つまり、正しい秘密鍵を使うということが、正しいユーザーから送られてきたリクエストであることを証明している)。
  5. ユーザー情報が一致するかを検証する。
  6. 認証の可否を返して、もし認証成功したならクライアント側でリモートホストのシェルを操作できる。
このスクラップは2024/02/12にクローズされました