パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

Google Compute Engine で失敗 SSH でログインできなく→一応解決

ちょっと GCE で仮想通貨をシステムトレードする BOT を動かそうとして、少々トラブってしまった。以前構築した「Google Cloud Platform の無料階層」の CentOS7 のインスタンスを使おうとしたのだが、ssh で入れない状態にしてしまって苦労してしまった。

 ネットで拾ってきた BOT のコードが Python で書かれているのだが、AWS のオンライン IDE Cloud9 を使おうとか思ったのも、小生のスキルからすると、ちょっと背伸びしすぎた感あり。特にそのコードは Python 3 系で Python 2 系とは互換性は無いようだ。対象のインスタンスの CentOS7 では、2.7.5 が標準で入っていた。3.6.5 辺りがそこそこ新しいぽい。インストール方法は、CentOS7 Python3 でググったら、やり方は色々出てくる。昔から慣れ親しんでいる? yum を使う方法を今回は使った(WEB ARCH LABO さんの記事)。記事を書いてくださっている皆様に感謝感謝。割とさくっとそこまではいったのだが、IDE Cloud9 から SSH 経由で、GCE のインスタンスを使おうとすると、最初から入っている 2.7.5 が使われるようで、コードを実行しようとすると、エラーが色々出る。デフォルトで使われる Python のバージョンを切り替える必要があるらしい。その辺も検索すると、update-alternatives を使う方法と、pyenv を使う方法が見つかった。後者は、Python 自体もソースをダウロードしてきてコンパイルするらしく、結構時間がかかる。前者が使えるといいのだが、なかなかうまく行かず… update-alternatives --install で、選択肢を追加して、それから選ぶのだろうか。

後、Cloud9 の場合、bash の alias で python=python36 にも設定した方が良いみたいだ(.bashrc に記述)。で、ターミナルの bash 上だと、python36 が優先して起動するようになった(python -V で確認)。

実は、結局の所、Cloud9 から GCE のインスタンスを使って、python のコードを動かすのは、まだ出来ていない。pip で依存するモジュールをダウンロード・インストールしたりするが、それも python のバージョン違いの影響を受けて、うまくいってないっぽいような。

で、ここからが本題なのだが、デフォルトの python のバージョンを 3 系にしたまま、インスタンスを再起動してしまうと、SSH でログインができなくなってしまった。シリアルポートを有効にして、起動時のログを見てみると、python3 で何かを実行している結果が出ている。実は GCE のインスタンス一覧から SSH のブラウザ上のターミナルウィンドウを出してログインする場合、ログインユーザの ~/.ssh/authorized_keys というファイルが、自動的に生成されるのだが、その辺りの処理が python で書かれているのかもしれない。完全な推測だが。それはともかく、SSH でログインできないと、デフォルトの python の切り替えも出来なくて、詰んだ感じ。

結局は、無料階層のインスタンスはブートディスクは残して削除して、もう1つインスタンスを作って、そいつのセカンドディスクとしてマウント、/etc/altanatives/python を python27 になるように書き換えて、そのディスクをブートディスクにして新しいインスタンスを起動すれば、SSH でログインできるようになった。

まぁ、たいしていじってなかったので、一から再構築しても良かったのだが。固定 IP アドレスも、以前と同じものを使えたので、python 周りで不要なファイルが増えたかもしれないが、一応、元に戻ってよかった。

サーバーの管理は難しいなぁ。