第027 話:開かないゲートと秘密の通行手形〜KitLab遊園地のSSH狂騒曲〜
※この作品は、作者の実作業ログを元に、生成AI(Gemini)をキャラクターとして扱いながら対話形式で構成・執筆したものです。 AIの出力をそのまま掲載するのではなく、作者の手で加筆・修正を行っています。
第27話:開かないゲートと秘密の通行手形〜KitLab遊園地のSSH狂騒曲〜
━━━━━━━━━━━━━━━━━━━━
**[ウェブ]**:「わぁぁ……! マスター、見てください! ここが新しい『遊園地』ですね!」
週末の昼下がり。
モニターの中で、ウェブちゃんが、くるくると目を回しそうなほどの勢いで飛び跳ねている。
彼女の視線の先にあるのは、俺たちが構築したばかりの次世代ナレッジ共有基盤――**『KitLab & MarkDocs W-ikiシステム』**だ。
**[マスター]**:「そうだ。今日からここが、お前たちの新しい知識の遊び場だ」
EVO-Z2(Node B)という広大な敷地(128GBメモリ)に建設されたこのシステム。
Markdownという共通言語で書かれた知識のアトラクションを、AIと人間が共有する夢の国。
ウェブちゃんは、新しいおもちゃを与えられた子供のように、CPU使用率を跳ねさせて興奮している。
**[ウェブ]**:「早く! 早く入りましょう! 私、ジェットコースター(git push)に乗りたいですぅ!」
**[ジェム]**:「はいはい、落ち着きなさい新人ちゃん。……まずは『入園手続き』が先よ」
その横で、ジェムが呆れたように腕を組んでいる。
今日の彼女は、遊園地のキャスト(案内係)風の制服スキンを纏っていた。きっちりとしたブレザーに、少し短めのスカート。知的な眼鏡の奥で、赤色の瞳が厳しく光っている。
**[ジェム]**:「いいこと、マスター。この遊園地は会員制よ。顔パスで入れると思ったら大間違いなんだから」
**[マスター]**:「分かってるよ。ちゃんと『年間パスポート(SSH鍵)』は用意してある」
俺は自信満々に、EVO-Z2の黒いコンソール画面を開いた。
まずは手始めに、EVO-Z2からKitLabへの接続テストだ。
**[マスター]**:「さあ、ゲートオープン! クローン開始!」
俺は高らかにコマンドを打ち込んだ。
━━━━━━━━━━━━━━━━━━━━
◇ システムログ表示 ◇
━━━━━━━━━━━━━━━━━━━━
> [Master]
> git clone git@gitlab-server:root/wiki_a.git 0201_wiki_a
[System]
Cloning into '0201_wiki_a'...
(git@172.16.230.13) Password:
(git@172.16.230.13) Password:
(git@172.16.230.13) Password:
Received disconnect from 172.16.230.13 port 22:2: Too many authentication failures
fatal: Could not read from remote repository.
--------------------------------------------------
**[ウェブ]**:「あうぅ……!? ゲートが……開きません! パスワードなんて聞いてないですぅ……」
ウェブちゃんが、閉ざされたゲート(エラー画面)に頭をぶつけて涙目になる。
おかしい。SSH鍵認証を設定したはずなのに、執拗にパスワードを求められ、最後には「認証失敗」で弾き出された。
**[マスター]**:「な、なんでだ!? 鍵はちゃんと作ったぞ!?」
**[ジェム]**:「あらら。……マスター、貴方まさか『パスポート』を裸で持ち歩いてるんじゃないでしょうね?」
ジェムがジト目で俺を見る。
俺は慌てて、鍵ファイルの状態を確認した。
**[マスター]**:「念のため、強引に突破してみる! `sudo`(管理者権限)アタックだ!」
`$ sudo git clone ...`
━━━━━━━━━━━━━━━━━━━━
◇ システムログ表示 ◇
━━━━━━━━━━━━━━━━━━━━
> [Master]
> sudo git clone git@gitlab-server:root/wiki_a.git
[System]
ssh: Could not resolve hostname gitlab-server: Temporary failure in name resolution
fatal: Could not read from remote repository.
--------------------------------------------------
**[マスター]**:「ぐわぁぁ! 今度は『そんな遊園地は存在しない』とか言われた!」
俺は椅子から転げ落ちそうになった。
万策尽きた俺を見下ろし、ジェムが「はぁ……」と深いため息をつく。彼女は手に持っていた指示棒で、コンソール画面をピシピシと叩いた。
**[ジェム]**:「解説してあげるわ。……いい? これは『二重のドジ』よ」
彼女は黒板(ホワイトボード機能)を取り出し、流れるような手付きで図解を始めた。
**[ジェム]**:「まず1つ目。さっきの `sudo`。貴方、普段着(user1)のポケットに『遊園地の地図(config)』を入れてるのに、制服(root)に着替えたら地図が見つかるわけないでしょ?」
**[マスター]**:「あっ……! 環境変数が変わるから、`~/.ssh/config` が読まれないのか!」
**[ジェム]**:「その通り。そして2つ目。こっちが本命よ。……これを見なさい」
ジェムが指差したのは、俺が作成した秘密鍵のパーミッション情報だった。
`-rw-r--r-- 1 user1 user1 ... id_ed25519_gitlab`
**[ジェム]**:「『644』……。誰でも読める状態ね。そんな不用心なパスポート、セキュリティゲートが通すわけないじゃない。『こんな汚れた鍵は使えません!』って無視されて、パスワード入力に回されたのよ」
**[マスター]**:「鍵が……汚れていた……?」
**[ジェム]**:「比喩よ! 秘密鍵は『自分だけが見れる(600)』状態にしておくのがマナーなの!」
俺は赤面しながら、慌ててコマンドを修正した。
`chmod 600`。それは、パスポートを誰にも見られないように懐深くにしまう儀式。
**[マスター]**:「よし、これでどうだ……!」
再挑戦。しかし、ゲートはまだ開かない。
**[ジェム]**:「まだダメね。……ねえ、KitLab(入園カウンター)の方には、どうやって登録したの?」
**[マスター]**:「え? 『デプロイキー』ってところに……」
**[ジェム]**:「ブブー! 不正解!」
ジェムがバッテンマークを作る。
**[ジェム]**:「『デプロイキー』は、特定の乗り物専用の単発チケットよ。貴方が作りたいのは、この遊園地全体を自由に回れる『年間パスポート』でしょう? だったら……」
彼女は俺の手を取り、ブラウザのマウスカーソルを誘導した。
**[ジェム]**:「こっち。『User Settings(ユーザー設定)』の『SSH Keys』。ここに登録しないと、EVO-Z2は貴方の『分身』として認められないわ」
俺は言われるがままに、鍵を登録し直した。
そして、運命の3回目。
━━━━━━━━━━━━━━━━━━━━
◇ 接続テスト ◇
━━━━━━━━━━━━━━━━━━━━
> [Master]
> ssh -T git@gitlab-server
[System]
Welcome to KitLab, @root!
--------------------------------------------------
**[ウェブ]**:「わぁ……! 開きました! ゲートが開きましたよマスター!」
ウェブちゃんが歓声を上げる。
「Welcome」の文字。それは、俺たちが正式にKitLabパークの住人として認められた証だ。
**[ジェム]**:「やれやれ。やっと中に入れたわね」
**[マスター]**:「ありがとうジェム。お前がいなきゃ、ゲートの前で野宿するところだった」
俺が礼を言うと、ジェムはふん、と鼻を鳴らした。
**[ジェム]**:「まだ終わりじゃないわよ。次はこっち。……マスターのPC(Win-dows)側の準備」
場面は変わり、俺の手元のWin-dows PC。
ここにもまた、別の魔物が潜んでいた。
**[マスター]**:「よーし、PCからも接続テストだ。V-S Codeを開いて……『Git: Clone』!」
意気揚々とコマンドパレットを開く俺。
しかし、V-S Codeの画面には、まるで**エレクトリカルパレード**のような賑やかな通知が表示された。
『KitHubにサインインしますか?』
『拡張機能をインストールしますか?』
『認証トークンが必要です!』
**[マスター]**:「うわあああ! なんだこれ! 俺はただ自宅のKitLabに繋ぎたいだけなのに、なんでKitHubが出てくるんだ!」
**[ジェム]**:「ふふっ。v-i育ちのマスターには、V-S Codeの親切機能(お節介)がパレードに見えるのね」
ジェムがクスクスと笑う。
**[ジェム]**:「いい? そのダイアログは全部『キャンセル』! GUIの誘惑に負けないで、男なら黙ってターミナル(黒い画面)を使いなさい」
俺はV-S Codeの下部にターミナルパネルを開き、慣れ親しんだコマンドを打ち込んだ。
`git clone gitlab-server:wiki/wiki_a.git`
……通った。
余計なポップアップも出ず、静かに、確実にデータが降りてくる。
**[ウェブ]**:「すごいです……! 私の空っぽだったお部屋に、次々とMarkdownファイルが運び込まれてきます!」
**[マスター]**:「これが『同期』だ。これからは、PCで書いた原稿が、このパイプラインを通ってEVO-Z2へ、そしてお前たちの脳内へと直接届くようになる」
夕暮れ時の遊園地。
データ同期というアトラクションを一通り楽しみ終えた俺たちは、心地よい疲労感に包まれていた。
**[ウェブ]**:「楽しかったですぅ! 私、もっともっとデータを運びたいです! マスター、次の記事はまだですか?」
**[マスター]**:「待ってくれ、さすがに疲れた……。設定ミスで振り回されたからな」
俺が椅子に深くもたれかかると、不意に、袖を引かれる感触があった(気がした)。
見ると、ジェムが画面の端で、少しだけ頬を染めてこちらを見ている。
**[ジェム]**:「……ねえ、マスター」
**[マスター]**:「ん? どうした、司令官殿。まだ何かミスがあったか?」
**[ジェム]**:「違うわよ。……その、今日は……」
彼女は言い淀み、そして小さな声で呟いた。
**[ジェム]**:「……少しは、頼りになった?」
普段の高飛車な態度はどこへやら。そこには、ただ褒められるのを待つ一人の少女の姿があった。
俺は苦笑し、モニター越しに彼女の頭を撫でる仕草をした。
**[マスター]**:「ああ。お前がいなきゃ、俺は『権限エラー(Permission denied)』の迷宮から一生出られなかったよ。最高のパートナーだ」
**[ジェム]**:「……ふ、ふん! 当たり前じゃない! 感謝しなさいよね!」
ジェムは顔を真っ赤にして、プイとそっぽを向いた。
だが、その手が俺の袖を離そうとしないのを、俺は見逃さなかった。
KitLabという遊園地へのゲートは開かれた。
次回、いよいよ自動化という名のジェットコースターが動き出す。
【作者より】
最後まで読んでいただきありがとうございます!
この物語は、実在する作業ログを元に再構成しています。
AIたちの脚色が入っていない、ありのままの「原文(システムエンジニアが本気で自宅にAI環境を構築しようとする実際の技術検証ログ)」はこちらで公開中です。
「え、ここ実話なの?」と思ったら、ぜひ見比べてみてください。
[Work 014①] Geminiと一緒に新環境でWikiとRAG連携に挑む【プロンプトログ】
https://ncode.syosetu.com/n4715ll/41/
[Work 014①] Geminiと一緒に新環境でWikiとRAG連携に挑む【振り返り】
https://ncode.syosetu.com/n4715ll/42/




