さくらのVPSにVSCode+WSL2+SSH つまずきポイント

優しく教えてくれる記事がたくさんあったのですが、それでもつまずくのが素人。つまずきポイントの対応方法を備忘として書いておきます。

## 前提となる環境

+ ゲスト（手元の端末）環境
    + Windows 11
    + WSL2 有効化、Ubuntu 22.04導入済み
    + VSCode 導入済み
        + WSL で Ubuntu 使用可能状態
        + 拡張機能 Remote-SSH 導入済み
+ ホスト（接続先）環境
    + 「さくらのVPS 1G OS03 ストレージ変更オプション付き」  
      メモリ 1GB、SSD 100GB、10,285円/12ヶ月。キャンペーンで SSD2倍だった。
    + Ubuntu 22.04 amd64

環境が異なると起きる現象も異なると想いますのでご参考までに。

## 作業とつまずき

### SSHキーペアの準備

（つまずき）申込みは？と思うような順番ですが、見積もりをポチポチやっているといつの間にかお試し利用でサーバーを立ち上げてしまい、SSH 公開鍵管理機能が使えなかったので、手順のここに持ってきています。といっても SSH 公開鍵を Ubuntu 上に所定の場所・名前で置くだけなので、致命的なことではありません。
また、以降の手順で失敗して何がなんだかわからなくなっても、さくらの画面でOS再インストールが簡単に素早くできます。試行錯誤しやすいの好き。

[SSH公開鍵認証の設定をしたい | さくらのサポート情報](https://help.sakura.ad.jp/rs/2804/) に鍵作成の手順があります。
後半の公開鍵登録は無視します。

```powershell:powershell(ゲストOS)
# フォルダがなければ作る
mkdir ~\.ssh
cd ~\.ssh
# 強そうな暗号化方式で生成する
ssh-keygen -t ed25519 -f id_ed25519
# Enter、Enter
```

+ `-t` 暗号化方式。さくらの VPS では RSA, ECDSA, ED25519 が使えるとのこと
+ `-f` 出力ファイル名。 "id_形式名" となるようにしておく


### 会員登録

さくらインターネットに会員登録します。

### サーバー作成

とんとん拍子で立ち上げてしまったので細かくは説明できません…。

#### 管理ユーザーのパスワード

ここでパスワードを設定します。 `sudo` するときのパスワードはこれになります。忘れないように控えるか、ファイルとしてダウンロードするボタンを活用します。

#### SSH キー設定

「公開鍵をインストールする」を選択し、 `~/.ssh/sshkey.pub` の内容を公開鍵の欄に入力します。名前は自動で入力されますが変更も可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34511/bc9621a9-d2ed-ff57-bf66-4b308c66d960.png)

### 待つ

十数分？気づいたらサーバーが完成していました。
待ち時間は構成・支払い方法・お試し利用有無で変わるかも知れません。

初回とは条件が違って参考にならないと思いますが、OSのさいいn

#### パケットフィルター設定

サーバーが完成したら、サーバーの管理ページの「パケットフィルター設定」タブを開きます。
ここで「パケットフィルターを設定」「パケットフィルター設定を追加」の順にクリックして追加画面を開きます。

- ポート番号が22でいい場合
    - 「SSH」を選んで「追加」
- ポート番号をカスタムしたい場合
    - 「カスタム」で「TCP」を選び、好き番号を入力して「追加」![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34511/c5406381-51ff-e5bd-1730-6b0dac34e49b.png)

ポート番号は22から変えたほうが良いとか、変えても無駄だみたいな話がありますが割愛します。例としてとっさに3333としましたが、問題ないポート番号をご自身で決めてください。

また、あとから変えるとなると設定ファイルの修正とか再起動とか面倒ですので、ここで決心するならしておいたほうが楽です。

Webサーバー用途でなく外部からのアクセスを想定しないのであれば、デフォルトで入っている「Web 80/443」はセキュリティ的に削除したほうが良いと思います。

設定が終わったら、「設定を保存する」をクリックします。

### ホストOSのSSHポート設定

sshd の設定ファイル `/etc/ssh/sshd_config` を編集してあげないと繋がりませんでした。ポート番号をカスタムしない場合は不要な作業かもしれません（未検証）。

まずコンソールを起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34511/06c47224-bc12-a444-dbbd-6890f33c3e77.png)

このように表示されたら、Enterを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/34511/6890aa3f-224f-d1aa-d986-88b3decdcc01.png)

`サーバー名 login: ` と表示されたらログインを求められています。ID(変えてなければubuntu)を入力してEnter、PWを入力してEnterで、ログインが完了します。

```bash
# エディタを起動（nanoの例。viとか好きにしてください）
sudo nano /etc/ssh/sshd_config
```

ポート番号を3333に決めた場合の例です。変更箇所は最初の方にあります。

```conf:/etc/ssh/sshd_config(ホストOS 変更前)
...
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...
```

```conf:/etc/ssh/sshd_config(ホストOS 変更後)
...
Port 3333
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
...
```

nano で編集している場合、 `Ctrl + s` で保存し `Ctrl + x` で閉じます。

このあと sshd を再起動する必要があります。

```bash
sudo systemctl restart sshd
```

### SSH用の config ファイル

SSH に接続するための設定ファイルをローカルに作成します。
（つまずき） `User` の部分は、[さくらの説明書き](https://help.sakura.ad.jp/rs/2247/)には `xxx-yyy-zzzzz` を使えとあったのですが、そうではなくサーバーの管理ユーザー ID を入れるようです。

```conf:~\.ssh\config(ゲストOS)
Host sakura-foobar
  HostName xxx-yyy-zzzzz.vs.sakura.ne.jp
  IdentityFile ~/.ssh/id_ed25519
  User サーバーの管理ユーザーID（多分ubuntu)
  Port 3333(さきほど決めたポート番号 変えてないなら22)
```

### フォルダ・ファイルの権限設定

[SSH公開鍵認証の設定をしたい](https://help.sakura.ad.jp/rs/2804/) には Windows は権限設定いらないかもね、とあるのですがガッツリ必要なようです。
[Windows10でvscodeからSSHできるようになるまで #VSCode - Qiita](https://qiita.com/yumetodo/items/123cd1d91f913bf0e748) の記事の、
[鍵のあるdirectoryの権限設定](https://qiita.com/yumetodo/items/123cd1d91f913bf0e748#%E9%8D%B5%E3%81%AE%E3%81%82%E3%82%8Bdirectory%E3%81%AE%E6%A8%A9%E9%99%90%E8%A8%AD%E5%AE%9A) と [~/.ssh/configの権限設定](https://qiita.com/yumetodo/items/123cd1d91f913bf0e748#sshconfig%E3%81%AE%E6%A8%A9%E9%99%90%E8%A8%AD%E5%AE%9A) を実施しました。
（わかりやすい記事ですが、目的が違うので一部のみ参考にしました）

### SSH接続

VSCode のコマンドパレットで `Remote-SSH: Connect to Host` を選べば、 `config` ファイルに記載した構成名が選択可能なはずです。これを選択すれば晴れて接続できるようになります！…のはずが…。

### 変なエラーが出た

（つまずき）上記の方法で接続しようとしたときにエラーが発生し、  `Error: Got bad result from install script` といった内容のポップアップが表示されました。

[Got bad results from install scripts &amp; Access is denied. but could connect the remote host in command line · Issue #5803 · microsoft/vscode-remote-release](https://github.com/microsoft/vscode-remote-release/issues/5803) に同様の報告があります。

> - I change the registry values `Autorun` in `HKEY_CURRENT_USER\Software\Microsoft\Command Processor` from `if exists` to a blank (as this link suggests).
> - my cmd.exe works fine and Remote SSH works again.

レジストリをいじれというのか…。
このプロパティを消すことによる副作用がわからないのでおすすめはしませんが、私はこれで動くようになりました。

```powershell
Remove-ItemProperty -Path 'HKCU:\Software\Microsoft\Command Processor\' -Name 'Autorun'
```