VSCodeでリモートサーバーのDockerコンテナに踏み台を経由して接続する方法

# この記事なに
どうでもいいところではまったので忘れないために・・・

# 事前に準備が必要なもの
<dl>
<dt>リモートサーバー（サーバー名：remote）<dt>
<dd>dockerのインストールとコンテナの立ち上げ<dd>
<dd>sshdサーバー<dd>
<dt>踏み台サーバー(サーバー名：humihumi)<dt>
<dd>sshdサーバー<dd>
<dt>ローカルマシン<dt>
<dd>VSCode<dd>
<dd>必要ライブラリ：Remote-SSH, Remote-Containers, Docker<dd>
</dl>

# sshの接続
VSCodeでRemote-SSHを絶対にインストールすること
### ローカルマシンでの作業
.sshのフォルダを自分のユーザーディレクトリに作ってください。
.sshのファルダのパーミッションは、`chmod 700 .ssh`で変更してください。
.sshにディレクトリを変更してから鍵を２つ作ります。
`ssh-keygen -t rsa -f kagi1`
`ssh-keygen -t rsa -f kagi2`
「kagi1」・「kagi1.pub」・「kagi2」・「kagi1.pub」の４つのファイルができます。
「kagi1」と「kagi2」は、
`chmod 600 kagi1`
 `chmod 600 kagi2`
でパーミッションの変更をしてください。

.sshのフォルダ内にconfigファイルを作り、以下の内容を記述してください。
```
Host remote
  HostName        (ipアドレスかホスト名)
  IdentityFile    C:\Users\hage\.ssh\kagi1
  User            hage
  LocalForward    localhost:23750 /var/run/docker.sock
  ProxyCommand    ssh -CW %h:%p humihumi

Host humihumi
  HostName        (ipアドレスかホスト名)
  IdentityFile    C:\Users\hage\.ssh\kagi2
  User            tare
  LocalForward    23750 localhost:23750
  Port            12345
```
### 踏み台サーバーでの作業
kagi1.pubを何かしらの方法で踏み台サーバーにもってきてください。
ユーザーのディレクトリに移動してから、
```
mkdir .ssh
chmod 700 .ssh
cd .ssh
# kagi1.pubを.sshに持ってくる。
cat kagi1.pub >> authorized_keys
chmod 600 ~/.ssh/authorized_keys
````
sshdの設定のためにsshd_configの内容を変更してください。
エディタはnanoになっていますが、すきなものつかってください。
```
sudo nano /etc/ssh/sshd_config
#PasswordAuthentication yes
↓
PasswordAuthentication no

#PermitRootLogin prohibit-password
↓
#PermitRootLogin no

#Port 22
↓
Port 12345
```
### リモートサーバー
先ほどと同じくkagi2.pubを何かしらの方法で踏み台サーバーにもってきてください。
ユーザーのディレクトリに移動してから、
```
mkdir .ssh
chmod 700 .ssh
cd .ssh
# kagi2.pubを.sshに持ってくる。
cat kagi2.pub >> authorized_keys
chmod 600 ~/.ssh/authorized_keys
````
``` sshd_configの変更
sudo nano /etc/ssh/sshd_config
#PasswordAuthentication yes
↓
PasswordAuthentication no

#PermitRootLogin prohibit-password
↓
#PermitRootLogin no
```

# dockerの準備
https://matsuand.github.io/docs.docker.jp.onthefly/engine/install/ubuntu/

を参考にしてます。
```
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
```
ログインユーザーにdockerの権限を当てる。
ここをしてないとパーミッションエラーで繋がらない（1敗）
```
sudo gpasswd -a $(whoami) docker
sudo chgrp docker /var/run/docker.sock
```
ここまでできたら何かしらのコンテナを作って稼働させておいてください。

### VSCodeからの接続（ローカルマシン）
sshの接続設定ファイルを読み込みます。
以下の順で押していくとconfigファイルの指定画面まで行けるので、最初に作った.sshディレクトリを指定してください。
![ssh.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173019/70588882-654a-7ada-e100-d2187cf8c4b7.jpeg)
設定すると接続先の指定ができるようになるのでので、リモートサーバーを選択してください。
すると別窓VSCodeが起動してリモートサーバーまで接続してくれます。
別窓で、Ctrl+,を押すと設定画面に行けるので、
リモートタブを選択してから「docker host」で検索するとDocker:Hostの設定が出てきます。
ここを「localhost:23750」と設定してください。
![vscodessh.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/173019/6ce76eb3-3e45-6546-5ff2-67393df6f806.jpeg)
別窓VSCode状で再度リモートエクスプローラーのアイコンをクリックし、
SSH ターゲットと書かれた部分の横の∨マークを押すと「Containers」を選択できるようになっている（はず）
なので選択するとリモートマシンのDockerコンテナにはいれるようになってるはずです。
（書き忘れがなければ・・・）

おわり