CData Software Blog

クラウド連携のCData Software の技術ブログです。

GCP で構築したVMインスタンスに SCP/SFTP でアクセスする方法(WinSCP/FileZilla/CData SFTP Driver)

こんにちは。CData リードエンジニアの杉本です。

GCP の gcloud コマンドライン ツールが優秀なので、あまり使う機会は無いかもですが、GCP VMはデフォルトでSCP/SFTPを使って接続し、ファイルのアップロード・ダウンロードを行うことができるようになっています。

今回はそういったファイル転送プロトコル経由でWinSCPFileZilla・CData SFTP Driverから接続して、ファイルをやり取りする方法を紹介したいと思います。

実施内容は主に以下のURLを参考にしています。

https://cloud.google.com/compute/docs/instances/transfer-files#top_of_page

手順

VMインスタンスの構成

まず、GCPVMインスタンスを構成します。

f:id:sugimomoto:20200419211123p:plain

マシン構成はほぼデフォルトのままです。リージョンは東京(asia-northeast1)を選択し、マシンタイプは検証用途のため「f1-micro」、ブートディスクは「Debian GUN/Linux9」を選択しました。

f:id:sugimomoto:20200419211129p:plain

公開鍵と秘密鍵の生成(RSA)と登録

VMインスタンスを構成後、SSHアクセスを行うための公開鍵と秘密鍵を生成します。

今回は「ssh-keygen」コマンドでそのまま生成しました。

> ssh-keygen

f:id:sugimomoto:20200419211135p:plain

生成したパブリックキーを開いて、GCPに登録します。(以下はすでに破棄しているものなのであしからず)

f:id:sugimomoto:20200419211140p:plain

Compute Engineの画面に戻り、「メタデータ」→「SSH認証鍵」に移動し、編集ボタンをクリックして、生成されたPublic Keyを貼り付けて保存します。

f:id:sugimomoto:20200419211146p:plain

以上でVMインスタンス側の準備は完了です。

単純に SSH でアクセスしてみる

さて、まずは単純に SSH でアクセスしてみたいと思います。

その前にあらかじめ秘密鍵のセキュリティを調整しておきましょう。以下のように生成したユーザーの「読み取りと実行」権限だけに変更しておきます。

f:id:sugimomoto:20200419211204p:plain

あとはSSHコマンドで対象VMインスタンスIPアドレス秘密鍵を指定すれば、対象のVMインスタンスSSHでアクセスすることができます。

> ssh {VMインスタンスのIPアドレス} -i id_rsa

f:id:sugimomoto:20200419211209p:plain

RSAからPPK(PuTTY Private Key)・PEM(OpenSSH)の生成方法

続いて、WinSCPFileZilla・CData SFTP Driver、それぞれから接続したいと思いますが、RSAのままだと使えないツールやサービスもあるので、RSAからPPK(PuTTY Private Key)・PEMの生成方法も解説します。

一番簡単にできる方法はPuTTY Key Genを使うアプローチかなと思います。

PuTTY Key Gen を立ち上げて、「Load」ボタンをクリックし、生成したRSA秘密鍵をロードします。

f:id:sugimomoto:20200419211216p:plain

ロード後、そのまま「Save Private Key」をクリックすればPPKファイルを生成できます。

f:id:sugimomoto:20200419211222p:plain

また、「Converions」から「Export OpenSSH Key」を選択すればPEMを生成できます。

f:id:sugimomoto:20200419211227p:plain

WinSCPから接続

まずは WinSCP から接続してみたいと思います。

WinSCPを立ち上げて、新しいサイトで接続構成を行います。

転送プロトコルは「SCP」、ホスト名に対象のVMインスタンスIPアドレス、ユーザ名にキーを生成した時に指定したユーザーのIDを入力します。そして詳細設定に移動し

f:id:sugimomoto:20200419211232p:plain

SSH」→「認証」にある秘密鍵の欄に先程生成したPPKファイルを指定します。

f:id:sugimomoto:20200419211239p:plain

これでログインすることで、接続できます。

f:id:sugimomoto:20200419211245p:plain

FileZillaから接続

続いてSFTPでも接続してみましょう。ツールは FileZilla を使用します。

サイトマネージャーを立ち上げて、新しいサイトを作成します。

プロトコルは「SFTP」を選択し、ホストに先程と同様に接続先のIPアドレスを入力します。ポートは22を指定。

ログオンタイプを「鍵ファイル」に変更し、秘密鍵を生成したユーザーのIDと対象の秘密鍵を指定します。

f:id:sugimomoto:20200419211251p:plain

あとは「接続」ボタンをクリックすれば、以下のようにSFTP接続ができます。

f:id:sugimomoto:20200419211259p:plain

CData SFTP Driver から接続

最後に CData SFTP Driver から接続してみます。CData SFTP Driver は SFTP接続先のファイルをSQLベースで参照・ダウンロード・アップロードが可能な Driver 型のライブラリ製品です。

https://www.cdata.com/jp/drivers/sftp/

f:id:sugimomoto:20200419211306p:plain

ODBCJDBCなど様々なテクノロジーがありますが、今回は JDBC を使って、接続してみます。

30日間トライアルがあるので、予めダウンロードしておきます。

なお、JDBCの接続クライアントとしてDbVisualizer を利用しました。

CData SFTP Driver をダウンロード・セットアップ後、DbVisalizer を立ち上げて、接続構成を行います。

まず Driver Managerから新しいDriverを登録します。「C:\Program Files\CData\CData JDBC Driver for SFTP 2019J\lib\cdata.jdbc.sftp.jar」を指定してください。

f:id:sugimomoto:20200419211319p:plain

次にDatabaseコネクションを作成します。

Driverとして先程登録した CData SFTP Driver を選択し、Database URLを入力します。

f:id:sugimomoto:20200419211325p:plain

Database URLは様々な入力パターンがありますが、例えば

RSAを使う場合」は以下のように指定します。

また、PPKファイルやPEMファイルも指定することが可能です。

ポイントは「SSH Auth Mode」をちゃんとPublicKeyにしておくことです。Userを鍵を作成したユーザー(ssh-keygenをした時のユーザー)で指定してください。

接続が完了すると、以下のようにルートフォルダが一覧で表示され、テーブルライクにデータアクセスが可能になります。

例えば、Homeフォルダを見てみると、以下のように対象のユーザーフォルダが存在することがわかります。

f:id:sugimomoto:20200419211332p:plain

また、SQLでファイルを探索することもできますし、「Download」のストアド・プロシージャを実行することで、対象フォルダのファイルをローカルに一括でロードすることも可能です。

SELECT * FROM home;

EXEC Download RemotePath = '/home/admin', LocalPath = 'C:\\Testdata\\SFTP';

f:id:sugimomoto:20200419211340p:plain

おわりに

SSHコマンドだけだと、ちょっとファイルのやり取りは面倒なものですが、SCP/SFTPプロトコルと各種ツールを使うことで、手軽にやりとりできるのは便利ですね。ぜひ活用してみてください。