ConoHa VPSの秘密鍵(pem)を無くしてハマった
事の発端
去年の春頃、ConoHa VPSでWordPressでブログ作るぞ!と思ってサーバーを立ち上げてワイワイやってたんですが、自分でWordPressのテーマを作らねば!という謎の使命感が芽生え、肝心の記事が書けずに燃え尽きるという、エンジニアあるあるをかましてしまいまして。
その後ずっと放置していたのですが、久々にいじってみようかなぁと思い、いざsshをしようとしたところ...繋がらない。
理由は、ローカルPCを新調した結果、秘密鍵を紛失したことでした。
秘密鍵の再発行
秘密鍵の再発行自体は全然難しいことではなく、公式のこの手順に従って改めて公開鍵を発行すれば、秘密鍵のダウンロードが出来ます。
問題は、その公開鍵をどうやってサーバー側に登録するかなんですが、手順の続き見ると、サーバーを追加するときにしかデプロイ出来ないっぽい。
私の探し方が悪いのかわかりませんが、外からファイル注入みたいなのは見つかりませんでした。
公開鍵の登録をしたが...
ないならしょうがないということで、コンソール画面の「テキスト送信(下図)」を使い、~/.ssh/authorized_keys
に鍵情報を強引に流し込んで登録しようとしました。
が!いくらやれどもPermission denied (publickey,gssapi-keyex,gssapi-with-mic).
と表示されて全く通信ができない...。
おかしい、鍵はちゃんと正しいものを置いてるはずなのに...。
原因
何回か試した結果、ふと「本当にテキスト送信出来てるの?」と思い、送信されたテキスト文字数をカウントしてみると...本来399文字であるはずなのに389とか390とか欠損してることが判明。
どうやらテキスト送信で一度に大量に送ってしまうと、いくつかの文字が送信出来ない模様。
そりゃ通信できないわけだ。
解決策
ものすごく原始的な解決策になりますが、
「一度にまとめて送るのではなく、ちょっとずつ送る」
でなんとかなりました。
- まず、ローカルPCなどで、元ネタを20文字程度ずつ出力。
fold -w 20 id_rsa.pub
- ConoHaのコンソールを開き、catで入力を待ち受ける。この時、適当な仮ファイルに出力するようにする。
cat << EOF > /tmp/hoge.log
- コンソールの「テキスト送信」を実行し、テキストボックスに1で出力した内容を半分程度貼り付け、送信する。残りの半分も改めて送信する。
- EOFを書いてファイルに出力する。この時、送信がうまくいってないと末尾がずれる。
> hoigjoeaijgih
> ogiwaje hoge
> EOF
- 貼り付けられたデータと1の出力を人力で見比べて、最後の列の文字が大体あってることを確認する...(20文字程度で区切った理由は、この人力diffが辛いから)
- 改行を除去してauthorized_keysに転記する。(バックアップとる人は適宜取る)
tr -d '\n'</tmp/hoge.log>>~/.ssh/authorized_keys
おわりに
同じことでハマる人はそうそういないと思いますが、誰かの参考になれば。
そもそもファイル注入方法あるのであれば、誰か教えてほしい...。
Discussion