マグカップの裏

プログラムとか、思ったこととか、料理とか

GoogleComputeEngineのVMインスタンスにFTP接続しようとして奮闘した話 結局SFTP

GoogleCloudPlatformのGoogleComputeEngineという、いわゆるVPSのようなVMインスタンスがある。
これでFTPサーバを立ててファイルを投げたいなーと思ってvsftpをインストールして設定いじって、GoogleCloudPlatformのインスタンスとしてのファイアウォールに穴を開け、VMインスタンスにインストールされているCentOSのfirewalldに黙っていただいた。しかし繋がらない。OOPS!じゃねえよ、と何度言ったことか。

調べてみたところ、どうもこのVMインスタンスにはFTP接続はできないらしい。
FTPがつながらない理屈は分からないが下記の記事を信じることにした。

作業報告ログ: [GCE] Google Compute EngineのVMインスタンスとローカル間でファイルのやりとりを行う


なにせ、FTPのセッション自体は確立できてもLISTコマンド等を受けてつけてくれないのだ。
GoogleComputeEngine FTPとかでググるとgcloudコマンドを使って~という的外れなのがたくさん出てくる。
代替え手段としては正当なんだとは思ったので、素直にやってみた。
しかしwindows7上でコマンドプロンプトからgcloudコマンドを使えるようにしても、下記コマンドが通らない。

gcloud component update gcutil

ちなみにWindows7上でgcloudコマンドを使うには下記リンクにあるインストーラを使ってインストールする。

cloud.google.com

その後はgcloudの認証等が必要になる。

gcloud auth login

脱線してしまっているし、詳細は下記とか適当に見てください。

qiita.com

一部情報(特にインストールのところ)は古くなっているようだけど、概ね参考になると思います。

で、先のgcutilのインストールだけど、Windows上では使えないとかでインストールできないんじゃないかという気がしてきた。
どちらにせよ私がやりたいことは実現できなさそう、できたとして非常にめんどくさい手順を踏む必要がる。



しかしそれでは困る、というわけで試行錯誤してて気づいたが、このインスタンスSSHつながるジャン。
ということはSCPかSFTPはつながるんじゃね?と思って調べてみたら普通にあった。

https://cloud.google.com/compute/docs/tutorials/transfer-files#sftp-compute-engine

なんてこったい。


早い話が、gcloudSDKをインストールして

gcloud compute ssh INSTANCE_NAME

こうすればSSHで接続してくれて、かつ共有鍵も作ってくれるのでその鍵をFilezillaなりなんなりに入れてあげれば使えるようになる。

ちなみに、Windows7なら下記フォルダに鍵が置いてある。

C:\Users\USERNAME\.ssh

FileZillaの設定画面を開いて、SFTPの鍵の追加で上記フォルダ内の「google_compute_engine」を登録、先のコマンドでSSH接続した際のパスフレーズを入力してやればつながります。
FileZillaの接続先IPはGoogleCloudPlatformのMyconsoleから確認、ユーザ情報は先のSSHで繋いだ時のもので良いです。

雑ですがこんな感じだった。

ちなみにどうでもいいですがセキュアなFTPにはSFTPとFTPSがあって、前者はSSHプロトコルを使って通信し、後者はSSLで暗号化して通信するはず。