[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

覚え書きしながら整理する場所

覚え書きしながら整理する場所ですよ

SSHについてまとめ

目的

SSHでサーバーのターミナルを開いたり、Gitに接続したりしてますが、必要になる度に毎回調べなおしている気がするので備忘のために基本的なところをまとめておきます。

概要

  • 何かのサービスを提供するサーバーにクライアントのアカウントを登録する際に、クライアントで作成した公開鍵をサーバーに登録しておきます。
  • 以降、クライアントがサーバーに接続する度に登録された公開鍵を使った認証が行われます。(公開鍵認証)
  • 公開鍵認証の手順ではサーバーがクライアントから接続要求を受けた時に、クライアントの公開鍵を使って暗号化した認証データをクライアントに送信し、クライアントが自分の秘密鍵を使ってこれを復号しサーバーに応答を返す事で認証が成立します。
  • 公開鍵認証方式ではパスワードの入力を必要としません。
    (代わりにパスフレーズの入力を求められたりしますが、これについては後述)

インストール

各環境用の ssh インストール方法はググれば簡単に見つかるので説明を割愛します。

鍵ペアの作成

  • ssh-keygen を使って秘密鍵と公開鍵のペアを作成できます。
# 鍵ペア生成の例
$ssh-keygen -t ed25519 -f ~/.ssh/<秘密鍵ファイル名>  -N "パスフレーズ"

暗号化方式

  • 作成するカギの暗号化方式は OpenSSH_9.3p1 では dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa から選べます。
  • dsa は古い方式なので使うなら ecdsa にすべき rsa はよく使われるが安全性を確保するには長い鍵長が必要。
  • 拘りがなければed25519を使うのが現在の最善。
  • 末尾に -sk がついているのは物理デバイスを併用する暗号方式。

パスフレーズ

ssh接続の設定

  • サーバーに ssh 接続する際の各種情報を .ssh/config ファイルに記述しておくことができます。
  • .ssh/configファイルの記述方法法は次の通り。
Host  <Hostのエイリアス名>
    HostName  <HostのURLまたはIPアドレス>
    IdenfityFile   <秘密鍵ファイルへのパス>
   <その他のオプション>  <オプションの値>
  • その他のオプションには次のものが指定できます。
    • Port <接続に使用するポート番号(Default 22)>
    • User <接続に使用するアカウント名>
    • ProxyCommand <プロキシ経由で接続するためのコマンド>
    • ForwardAgent <エージェント転送(後述)を有効にするか>
    • PreferredAuthentications <サーバー接続時、認証方法の優先順位を指定>
      publickey | password | keyboard-interactive | gssapi-with-mic

秘密鍵の利用

ssh-agent 起動

  • ssh-agent を自動起動するにはサービスとしてシステム起動時に起動するか、シェル(bash等)の初期化スクリプトで起動する方法の2通りの方法があります。
  • また、Windows,Linux,MacOSなどシステムごとに実行方法が異なるので、それぞれの環境に適した起動方法を採用してください。
  # Windows の GitBash で ssh-agent を起動する例を示します。
  $ tail ~/.bashrc
  # Start the SSH agent automatically
  if [ -z "$SSH_AUTH_SOCK" ]; then
    eval $(ssh-agent -s)
  fi

秘密鍵登録

  • ssh-agent に秘密鍵を登録するには > ssh-add -K <秘密鍵へのパス> とする。
  • 登録されている秘密鍵を確認するには > ssh-add -l とする。

秘密鍵転送

  • 秘密鍵転送の目的は、HostA で作成した鍵ペアの情報を使って HostC にアクセスする時、別のホスト HostB を経由しなければならないときに秘密鍵を HostB にコピーせずに済むようにすること。
  • サーバーに ssh 接続するには公開鍵をサーバーに登録しておく事と、クライアントが秘密鍵を保持している事が必要だが、秘密鍵転送を使うと、途中経過のHostB に秘密鍵自体をコピーしなくても ssh-agent 同士が秘密鍵の情報を転送することができ、秘密鍵流出のリスクを減らすことができる。
  • 秘密鍵転送を使うには .ssh/config の経由先ホストの記述に ForwardAgent yes と記述しておく
# ~/.ssh/config
Host  HostB
     HostName           HostB.home.local
     ForwardAgent     yes