WinSCPを利用してOCIのBastion経由でファイル転送してみた

# はじめに
Oracle Cloud Infrastructure(OCI)には[マネージドなBastionサービス](https://docs.oracle.com/ja-jp/iaas/Content/Bastion/home.htm)(しかも無料！)があります。
Bastionを利用したOCI環境上のコンピュートサービス等への接続方法の解説はいろいろとありますが、今回はWinSCPを利用してのファイル転送設定を行ったので、備忘のために記しておきます。

# WinSCPって？
WinSCPは言わずと知れた、Windows用のFTP/SFTP/SCPソフトになります。
[こちら](https://forest.watch.impress.co.jp/library/software/winscp/) からダウンロードできます。

# Bastionの設定
Bastionには管理対象SSHセッションとSSHポート転送セッションがありますが、今回はLinuxに向けての接続になるため、管理対象SSHセッションを利用します。以下の流れはBastionが作成されている前提での流れとなります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/35a57cea-3089-9146-40f0-f842d328a92c.png)
(https://oracle-japan.github.io/ocitutorials/intermediates/bastion/)

#### 1．セッションの確認
Bastionを利用する場合には、毎回セッションの作成が必要になります。
セッションが作成されると以下のような状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/db2339d2-da0d-da4d-b960-2862ec399900.png)

#### 2．セッション情報の表示

右の：をクリックすると「SSHコマンドの表示」ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/2755ea4c-faee-5316-b2b1-32eb8df6da1e.png)

SSHコマンドは以下のような形式になります。
(privatekeyはBastion作成時に設定したkeyになります)
```shell
ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 ocid1.bastionsession.oc1.iad.xxxxxxxxxxxxxxxxxxx@host.bastion.us-ashburn-1.oci.oraclecloud.com" -p 22 opc@192.168.0.219
```

#### 3．WinSCPの設定
###### 3.1．ログイン情報の設定
WinSCPを起動し、ログイン情報を以下のように設定します。

- 転送プロトコル：SCP
- ホスト名：接続対象コンピュートのIPアドレス、例では 192.168.0.219
- ポート番号：SSH接続のポート番号、通常 22
- ユーザ名：標準のコンピュートの場合、opc

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/87806520-da4a-a80f-a45d-01917409c973.png)

###### 3.2．トンネル情報の設定
ログイン情報のページから「設定」をクリックすると、高度なサイトの設定に移動します。
トンネル設定で以下のように設定します。

- SSHトンネルを経由して接続する：チェックを入れる
- ホスト名：セッション情報の表示で表示された@より右の値を入れる、例では host.bastion.us-ashburn-1.oci.oraclecloud.com
- ユーザ名：セッション情報の表示で表示された@より左の値を入れる、例では ocid1.bastionsession.oc1.iad.xxxxxxxxxxxxxxxxxxx
- ポート番号：SSH接続のポート番号、通常 22
- 秘密鍵：Bastion作成時に利用したキー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/21a28859-e27e-ae8f-38eb-8d602378d07e.png)

###### 3.3．認証情報の設定
高度なサイトの設定内の「認証」をクリックします。
認証設定で以下のように設定します。

- エージェントの転送を許可する：チェックを入れる
- 秘密鍵：Bastion作成時に利用したキー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/d971718c-1626-b294-629f-da7801817e29.png)

#### 4．WinSCPでVMへ接続
高度な設定を保存し、ログイン画面に戻り、ログインを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/f6204083-99a1-2c6d-5828-1617361befc5.png)

以下のようにセッションが開始されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/97fd5a68-596b-83ea-947a-3fcc454067ab.png)

無事接続することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/a75dd97e-75c5-4791-7ccc-9e71999a7db0.png)

#### 5．ファイル転送
試しに赤枠のファイル（MOS-level1.png）を転送してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2313926/7cb50551-d2a2-f7d2-d682-41309b32d373.png)

無事サーバ上で転送したファイルを確認することができました。
```shell
$ ll
-rw-r--r--. 1 opc opc 43026 May  7 00:18 MOS-level1.png
```

# まとめ
ローカル環境とのファイル送受信を行うケースはObject Storageを経由する方が楽かもしれませんが、なんらかの理由でサーバ側と直接の送受信が必要な場合には、上記のようにBastion経由で実施できますので参考にしていただければ幸いです。
なお、OCIのBastionを利用する場合、毎回セッションを作り直す必要があるので、**トンネル情報**の**ユーザ名**はセッションが変わったら入れ替える必要がありますのでご注意ください。

#### 参考

- [BastionサービスでパブリックIPを持たないリソースにアクセスする](https://oracle-japan.github.io/ocitutorials/intermediates/bastion/)
- [【Oracle Cloud】Bastion経由でプライベート環境のリソースに接続する](https://cloudii.jp/news/blog/oracle-cloud/%E3%80%90oracle-cloud%E3%80%91bastion%E7%B5%8C%E7%94%B1%E3%81%A7%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E7%92%B0%E5%A2%83%E3%81%AE%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%AB%E6%8E%A5/)
- [[Oracle Cloud] Bastionサービスを使ってみた](https://qiita.com/kenwatan/items/840ec56153aaefcaefe4)