こんにちは。CData リードエンジニアの杉本です。
GCP の gcloud コマンドライン ツールが優秀なので、あまり使う機会は無いかもですが、GCP VMはデフォルトでSCP/SFTPを使って接続し、ファイルのアップロード・ダウンロードを行うことができるようになっています。
今回はそういったファイル転送プロトコル経由でWinSCP・FileZilla・CData SFTP Driverから接続して、ファイルをやり取りする方法を紹介したいと思います。
実施内容は主に以下のURLを参考にしています。
https://cloud.google.com/compute/docs/instances/transfer-files#top_of_page
手順
VMインスタンスの構成
まず、GCPでVMインスタンスを構成します。
マシン構成はほぼデフォルトのままです。リージョンは東京(asia-northeast1)を選択し、マシンタイプは検証用途のため「f1-micro」、ブートディスクは「Debian GUN/Linux9」を選択しました。
公開鍵と秘密鍵の生成(RSA)と登録
VMインスタンスを構成後、SSHアクセスを行うための公開鍵と秘密鍵を生成します。
今回は「ssh-keygen」コマンドでそのまま生成しました。
> ssh-keygen
生成したパブリックキーを開いて、GCPに登録します。(以下はすでに破棄しているものなのであしからず)
Compute Engineの画面に戻り、「メタデータ」→「SSH認証鍵」に移動し、編集ボタンをクリックして、生成されたPublic Keyを貼り付けて保存します。
以上でVMインスタンス側の準備は完了です。
単純に SSH でアクセスしてみる
さて、まずは単純に SSH でアクセスしてみたいと思います。
その前にあらかじめ秘密鍵のセキュリティを調整しておきましょう。以下のように生成したユーザーの「読み取りと実行」権限だけに変更しておきます。
あとはSSHコマンドで対象VMインスタンスのIPアドレスと秘密鍵を指定すれば、対象のVMインスタンスにSSHでアクセスすることができます。
> ssh {VMインスタンスのIPアドレス} -i id_rsa
RSAからPPK(PuTTY Private Key)・PEM(OpenSSH)の生成方法
続いて、WinSCP・FileZilla・CData SFTP Driver、それぞれから接続したいと思いますが、RSAのままだと使えないツールやサービスもあるので、RSAからPPK(PuTTY Private Key)・PEMの生成方法も解説します。
一番簡単にできる方法はPuTTY Key Genを使うアプローチかなと思います。
PuTTY Key Gen を立ち上げて、「Load」ボタンをクリックし、生成したRSA の秘密鍵をロードします。
ロード後、そのまま「Save Private Key」をクリックすればPPKファイルを生成できます。
また、「Converions」から「Export OpenSSH Key」を選択すればPEMを生成できます。
WinSCPから接続
まずは WinSCP から接続してみたいと思います。
WinSCPを立ち上げて、新しいサイトで接続構成を行います。
転送プロトコルは「SCP」、ホスト名に対象のVMインスタンスのIPアドレス、ユーザ名にキーを生成した時に指定したユーザーのIDを入力します。そして詳細設定に移動し
「SSH」→「認証」にある秘密鍵の欄に先程生成したPPKファイルを指定します。
これでログインすることで、接続できます。
FileZillaから接続
続いてSFTPでも接続してみましょう。ツールは FileZilla を使用します。
サイトマネージャーを立ち上げて、新しいサイトを作成します。
プロトコルは「SFTP」を選択し、ホストに先程と同様に接続先のIPアドレスを入力します。ポートは22を指定。
ログオンタイプを「鍵ファイル」に変更し、秘密鍵を生成したユーザーのIDと対象の秘密鍵を指定します。
あとは「接続」ボタンをクリックすれば、以下のようにSFTP接続ができます。
CData SFTP Driver から接続
最後に CData SFTP Driver から接続してみます。CData SFTP Driver は SFTP接続先のファイルをSQLベースで参照・ダウンロード・アップロードが可能な Driver 型のライブラリ製品です。
https://www.cdata.com/jp/drivers/sftp/
ODBCやJDBCなど様々なテクノロジーがありますが、今回は 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」を指定してください。
次にDatabaseコネクションを作成します。
Driverとして先程登録した CData SFTP Driver を選択し、Database URLを入力します。
Database URLは様々な入力パターンがありますが、例えば
「RSAを使う場合」は以下のように指定します。
- jdbc:sftp:RemoteHost={GCP VM インスタンスのIPアドレス};Remote Port=22;SSH Client Cert={RSA秘密鍵のファイルパス};SSHClientCertType=PUBLIC_KEY_FILE;User=UserNamae;SSH Auth Mode=PublicKey;
また、PPKファイルやPEMファイルも指定することが可能です。
- jdbc:sftp:RemoteHost={GCP VM インスタンスのIPアドレス};Remote Port=22;SSH Client Cert={PPKのファイルパス};SSHClientCertType=PPKFILE;User=sugim;SSH Auth Mode=PublicKey;
ポイントは「SSH Auth Mode」をちゃんとPublicKeyにしておくことです。Userを鍵を作成したユーザー(ssh-keygenをした時のユーザー)で指定してください。
接続が完了すると、以下のようにルートフォルダが一覧で表示され、テーブルライクにデータアクセスが可能になります。
例えば、Homeフォルダを見てみると、以下のように対象のユーザーフォルダが存在することがわかります。
また、SQLでファイルを探索することもできますし、「Download」のストアド・プロシージャを実行することで、対象フォルダのファイルをローカルに一括でロードすることも可能です。
SELECT * FROM home;
EXEC Download RemotePath = '/home/admin', LocalPath = 'C:\\Testdata\\SFTP';
おわりに
SSHコマンドだけだと、ちょっとファイルのやり取りは面倒なものですが、SCP/SFTPプロトコルと各種ツールを使うことで、手軽にやりとりできるのは便利ですね。ぜひ活用してみてください。
関連コンテンツ