ConoHa VPSの秘密鍵(pem)を無くしてハマった

2022/01/23に公開

事の発端

去年の春頃、ConoHa VPSでWordPressでブログ作るぞ!と思ってサーバーを立ち上げてワイワイやってたんですが、自分でWordPressのテーマを作らねば!という謎の使命感が芽生え、肝心の記事が書けずに燃え尽きるという、エンジニアあるあるをかましてしまいまして。

その後ずっと放置していたのですが、久々にいじってみようかなぁと思い、いざsshをしようとしたところ...繋がらない。
理由は、ローカルPCを新調した結果、秘密鍵を紛失したことでした。

秘密鍵の再発行

秘密鍵の再発行自体は全然難しいことではなく、公式のこの手順に従って改めて公開鍵を発行すれば、秘密鍵のダウンロードが出来ます。
問題は、その公開鍵をどうやってサーバー側に登録するかなんですが、手順の続き見ると、サーバーを追加するときにしかデプロイ出来ないっぽい。
私の探し方が悪いのかわかりませんが、外からファイル注入みたいなのは見つかりませんでした。

公開鍵の登録をしたが...

ないならしょうがないということで、コンソール画面の「テキスト送信(下図)」を使い、~/.ssh/authorized_keysに鍵情報を強引に流し込んで登録しようとしました。

が!いくらやれどもPermission denied (publickey,gssapi-keyex,gssapi-with-mic).と表示されて全く通信ができない...。
おかしい、鍵はちゃんと正しいものを置いてるはずなのに...。

原因

何回か試した結果、ふと「本当にテキスト送信出来てるの?」と思い、送信されたテキスト文字数をカウントしてみると...本来399文字であるはずなのに389とか390とか欠損してることが判明。
どうやらテキスト送信で一度に大量に送ってしまうと、いくつかの文字が送信出来ない模様。
そりゃ通信できないわけだ。

解決策

ものすごく原始的な解決策になりますが、
「一度にまとめて送るのではなく、ちょっとずつ送る」
でなんとかなりました。

  1. まず、ローカルPCなどで、元ネタを20文字程度ずつ出力。
fold -w 20 id_rsa.pub
  1. ConoHaのコンソールを開き、catで入力を待ち受ける。この時、適当な仮ファイルに出力するようにする。
cat << EOF > /tmp/hoge.log
  1. コンソールの「テキスト送信」を実行し、テキストボックスに1で出力した内容を半分程度貼り付け、送信する。残りの半分も改めて送信する。
  2. EOFを書いてファイルに出力する。この時、送信がうまくいってないと末尾がずれる。
> hoigjoeaijgih
> ogiwaje hoge
> EOF
  1. 貼り付けられたデータと1の出力を人力で見比べて、最後の列の文字が大体あってることを確認する...(20文字程度で区切った理由は、この人力diffが辛いから)
  2. 改行を除去してauthorized_keysに転記する。(バックアップとる人は適宜取る)
tr -d '\n'</tmp/hoge.log>>~/.ssh/authorized_keys

おわりに

同じことでハマる人はそうそういないと思いますが、誰かの参考になれば。
そもそもファイル注入方法あるのであれば、誰か教えてほしい...。

Discussion