GCPにSFTPサーバーを立てる。

また嵌った。
ほんと土方仕事は地獄やでぇぇぇぇ


## 起こったこと
某氏より依頼。
海外より大切なデータを転送したいので、SFTPサーバーを用意してくれと。
適当なクラウドストレージじゃぁだめですか、っていうかサーバーぐらい先方に用意してもらいなよ。というのはまあおいておいて、ともかく国内に鍵認証のSFTPサーバーを調達しろとの依頼である。

いやしかし手元にマシン無いぜって状態だったので、GCPを使うことに。
多分AzureでもAWSでもやることはそんなに変わらない。
けど、何点か嵌ったので、画像つきで記録を残す。

一応GCPの課金可能なアカウントが存在する前提で進める。
なるべく無料になるように選んでいくが、真似してお金がかかっても責任は取れないんだ。
許してね。

### 仮想端末デプロイ
とりあえずGCPのダッシュボードは開けているかな？
こんな感じだ。
![コメント 2020-07-24 113352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/1d70e561-f061-6763-6cce-f37107a30f92.png)


そしたらCompute EngineからVMインスタンスを選ぶ

![コメント 2020-07-24 1133waf52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/f1cc9f21-e6e9-e0ef-df09-521496943ac1.png)


作成の際に気をつけるのは以下

- リージョンは国内（これは依頼による）
- マシンタイプはf1micro（経済的事情）
- ディスク容量は30G以内（経済的事情）
- OSはUbuntu（これは好み）
- HTTP, HTTPSトラフィックは許可しない
- ネットワークインターフェイスは、静的IPを予約
    - これはインスタンス止めると課金されるらしいので注意ね。

![コメント 2020-07-24 1waf133waf52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/3bb24099-b14e-4d9e-1fe1-0e9afa59bd19.png)


そしたら完了して、インスタンスを起こす。
そしたら（2回め）SSHボタンを押して、ブラウザからコンソールを起こそう。

赤く塗りつぶしたところに
![コメント 2020-07-24 115358.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/e8c86a14-df93-d6ad-5ad7-a4a4a6a0aa2b.png)


~~~
yourname@instancename
~~~

みたいなのがある。これを覚えておこう。
これはアカウント名と、インスタンス名だから、以降適当に読み替えていってね！

あと、インスタンスの詳細で表示される、
ネットワークインターフェイスに、外部IPとしてマシンのIPアドレスが存在するよ。
ここでは面倒だからA.B.C.Dとしておくね。

### 鍵作成
次の作業はローカルでやるよ。
open-sshが利用できればWindowsでもMacでも、Linuxでも何でもいいと思う。
今回はWSL2でやった。

コピペ元はWSL2のそれだ。

~~~
ssh-keygen -t rsa -b 4096 -C "yourname@instancename"
~~~


これでホーム直下の.sshディレクトリに目的の秘密鍵、公開鍵が作られる。
いわゆる、
~/.ssh/id_rsa
てやつだね。

~~~
ssh-keygen -t rsa -b 4096 -C "yourname@instancename" -f unko
~~~

とすれば、ホーム直下に出力ファイルunkoで鍵ができているはずだ。
パスワードはとりあえずburiburiにしている。

上のyourname@instancenameを間違えているとこの先うまく行かない、はず。
unkoが秘密鍵、unko.pubが公開鍵だ。
公開鍵を適当なテキストエディタで開こう。
内容はCntr+A、Cntr+Cで何も考えずに全コピーだ


##鍵登録

GCPダッシュボードの、インスタンス詳細画面→編集を選ぶ。
![コメント 2020-07-24 120918.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/3b9c351f-ba80-990d-f5e0-e72445dcc587.png)

したらば下の方に鍵登録の場所があるよ。
![コメント 2020-07-24 12waf0918.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/1a250579-7b46-5685-20b7-bffb67e91572.png)


ここにさっきのコピーを貼り付けよう。
左側に正しいyournameは表示されているかな？
鍵の末尾は、yourname@instancenameになっているかな？

![fwafa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/b4693c8d-2c36-60e8-c2eb-c2a726c56bb5.png)

表示されていたら保存だ！

### 嵌ったポイント
保存された設定が使えるようになるのにちょっと時間がかかるみたいだ。
次のステップがうまく行かない場合、まあ色々原因はあると思うけど、
とりあえずうんこでも言ってきたらどうかな！

## ssh

じゃあ今度はローカルからGCPのインスタンスにアクセスして見よう。

ローカルのコンソールから

~~~
ssh yourname@A.B.C.D -i unko
~~~

ってしてみよう。
Are you sure you want to continue connecting (yes/no)? 
って聞かれたらyesしてエンター
パスワード聞かれたらburiburi入れる。

接続、ログインできたらおめでとう！
とりあえず

~~~
mkdir kusobako
~~~
しておくね。

## SFTP

適当なGUIアプリを使いたいとのことだったので今回はWinSCPを使うよ！
設定は下みたいな感じだ。
ホスト名にIPアドレス、A.B.C.Dに相当するもの
ユーザー名はyournameだよね。

設定から、SSH、認証に進んで、
秘密鍵を入れる。
これはさっきのunkoだよね。

PuTTy形式にするか聞かれると思うので、OKだ。
パスワードはburiburiだよね。

![コメント 2020-07-24 122734.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/b6f198bb-198c-e8ce-14bf-e8e5d124f236.png)


で接続ぅ！

成功したらkusobakoが見えるはずだ。
![コメント 2020-07-24 123858.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/676634/fa094f0e-a454-f0a6-495b-cf2f68f445fa.png)

やったぜ！


## ユーザー追加
インスタンス側で

~~~
sudo adduser hername

~~~
する。すると彼女の名前でアカウントが作れるぞ！

あとは

~~~
ssh-keygen -t rsa -b 4096 -C "hername@instancename" -f herunko
~~~

すれば彼女の鍵が作れる。
彼女の公開鍵を同じ用にダッシュボードのインスタンス編集のところからSSH認証鍵のところで登録して、
あとのやり方は同じ。

### その他
nmAPしてみたところ22ポートしか空いていない。っぽいね。
あとはポートを変えればより安全で良いけど、
ワイの施設からGCPに22番以外でSSHするのが結構手間がかかるのよね。
なので今回はその話は別に。


Q:これって医療情報を扱う噂のガイドラインに準拠しているの？
A:知らないけど多分Noじゃないかな？
以下を参照してね。
https://www.meti.go.jp/press/2019/03/20200305001/20200305001.html

ガイドラインは暗号化について記載しているだけじゃないし、これで準拠サービスかというとどう考えてもNoだよね。
ちなみにネットワーク暗号化についてはこんな記載だ。

~~~
HTTPS接続においては、TLS の設定はサーバ/クライアントともにCRYPTRECが定める「SSL/TLS 暗号設定ガイドライン（第2.0版）平成30年5月8日（以下、「SSL/TLS暗号設定ガイドライン」という。）」に規定される最も安全性の高い「高セキュリティ型」に準じた適切な設定を行うこと。
また、医療情報安全管理ガイドラインは、SSL-VPNを原則として利用しないよう求めている。やむを得ずSSL-VPNを利用する場合は、SSL/TLS暗号設定ガイドラインに基づき、「クライアント型」でのSSL-VPNとすること。
~~~