過去記事:
- SSHの事情と理屈と設定 - (新) 檜山正幸のキマイラ飼育記 メモ編
- SSHコマンドとconfig - (新) 檜山正幸のキマイラ飼育記 メモ編
- wt(Windows Terminal) + SSH - (新) 檜山正幸のキマイラ飼育記 メモ編
これらの内容を概念的にまとめる。
内容:
情報リソース
まず、関連する情報リソース(ロケーションを持つデジタルデータ)に概念的名前を付ける。
概念的名前 | 実際のパス | 名称 |
---|---|---|
SSHDir | ~/.ssh/ | SSHディレクトリ |
PrivateKey | 自由 | 秘密鍵{ファイル}? |
PpublicKey | 自由 | 公開鍵{ファイル}? |
KeyPair | 自由 | 鍵ペア |
Config | ~/.ssh/config | 設定{ファイル}? |
AuthorizedKeys | ~/.ssh/authorized_keys | アクセス許可公開鍵リスト |
KnownHosts | ~/.ssh/known_hosts | ホスト公開鍵リスト |
※AuthorizedKeysは、用語的には AuthenticatedKeys 。認証〈AutheN | オーセン〉と認可〈AuthoriZ | オーソ{リ | ライ}ズ〉は違う。
上記の情報リソースはファイルシステムのファイルとして存在するが、注意事項は:
- 秘密鍵と公開鍵の置き場所は自由だが、鍵ペアは同じディレクトリに置く。SSHDirに置く必要性はない。
- とはいえ、鍵ペアをSSHディレクトリに置くのが管理が楽(関連ファイル達がファイルシステム内で散らばらない)。
- 秘密鍵があれば、公開鍵は計算できる。が、同時に生成してペアとして扱う。
- コンベンションとして、秘密鍵ファイル名と公開鍵ファイル名に共通の文字列を持たせて、それを鍵名〈鍵タイトル〉として使う。鍵名は、エージェント(行動環境における行動主体)の名称とみなせる。
- 「デフォルトの鍵名」が使えるかもしれないが、デフォルトは諸悪の根源、使わないこと!
- 公開鍵のデータ本体は、1行のBase64エンコード文字列である。パディングにイコール文字が使われる。前後に短いメタデータが付くかも知れない。
- 公開鍵リストは、1つの公開鍵を1行とする単なるテキストファイルである。
行動主体と行動環境
今まで「エージェント」と呼んできたが、「SSHエージェント」「ユーザーエージェント」などと混同するから、行動主体にする。行動主体は、現実世界の実体ではなくて、抽象化された概念的な存在物。行動主体は、やはり概念的な行動環境内で主体的に行動する。
行動主体と行動環境を表すデータを代理データと呼ぶ。
- 行動主体の代理データ
- 行動環境の代理データ
代理データは次の構成素からなる。
- 識別子: ある名前スコープ内において、個体を一意識別する。
- クレデンシャル: 身分証明書みたいなデータ
ある状況(多くの状況)においては、行動主体をユーザー、行動環境をホストと呼ぶ。
アカウント概念
アカウントは、ユーザー〈行動主体〉とホスト〈行動環境〉の結びつき/関連性のことだが、複合データとしての構成素は:
- ユーザー識別子: 文字列
- ユーザークレデンシャル: 文字列(巨大整数の表現)
- ホスト識別子: 文字列(番号の文字列含む)
- ホストクレデンシャル: 文字列(巨大整数の表現)
- アカウント識別子: 文字列(名前)
アカウントは、単純有向二部グラフ(多重辺を持たない二部グラフ)のラベル付き有向辺として表現される。
二部グラフのノードは:
- (ユーザー識別子, ユーザークレデンシャル) のノード=ユーザーノード
- (ホスト識別子, ホストクレデンシャル) のノード=ホストノード
有向辺の方向はどっちでもいいが、ユーザー → ホスト の方向と約束する。
アカウントの記述
SSHコマンドとconfig - (新) 檜山正幸のキマイラ飼育記 メモ編 で出した、SSH config エントリーはまさにアカウントの記述になっている。
Host daphnia-chimaira HostName 160.251.23.194 User chimaira IdentityFile C:\Users\m-hiyama\.ssh\daphnia-chimaira_ed25519_key
- ユーザー識別子: "chimaira"
- ユーザークレデンシャル: ファイル C:\Users\m-hiyama\.ssh\daphnia-chimaira_ed25519_key の内容
- ホスト識別子: "160.251.23.194"
- ホストクレデンシャル: "160.251.23.194" をキーとして known_hosts を引いた結果
- アカウント識別子: "daphnia-chimaira"
ここで文字列データの記述方法は:
- インライン: 160.251.23.194(ホスト識別子) と chimaira(ユーザー識別子) と daphnia-chimaira(アカウント識別子)
- ファイルの内容を参照: C:\Users\m-hiyama\.ssh\daphnia-chimaira_ed25519_key(ユーザークレデンシャル)
- キーバリュー・ストアのキー: 160.251.23.194 はキーにもなっている。(ホストクレデンシャル)
この場合のキーバリュー・ストアとは ~/.ssh/known_hosts ファイルで、行の先頭文字列がキーで、公開鍵データの文字列がバリュー。
クレデンシャルの本体は秘密鍵だが、秘密鍵を秘匿したままで公開鍵がクレデンシャル(身分証明書、本人確認署名)として使えるところが公開鍵方式のミソ。
接続とその記述
アカウントは、ユーザー〈行動主体〉とホスト〈行動環境〉のあいだの“確立された関係性”である。
より具体的で一回性のイベントとして接続がある。アカウントの記述は接続の(一般的)記述とみてもよいが、次の Windows Terminal の設定がより接続っぽい。
{ "backgroundImage": 〈null | "イメージファイル名"〉, "colorScheme": "Solarized Light", "commandline": "ssh コマンドライン", "guid": "{d2c4024c-bdae-5a30-81ff-877fed55010a}", "icon": "C:\\Users\\m-hiyama\\Pictures\\2021-08\\ConoHa-Co.jpg", "name": "ConoHa" },
このなかで、UIに関わるプロパティ〈フィールド〉は:
- backgroundImage
- colorScheme
- icon
guid〈一意識別子〉 と name〈タイトル〉 によって接続を識別している。commandlineは接続の実現方法の記述で、背後にアカウント(具体的には SSH configエントリー)がある。