超初心者向け、VS Code で ssh 接続する方法

# はじめに

この記事では初心者の方でも ssh で接続できる方法を教えます。両方のコンピュータに `ssh` が搭載されていることを前提にしています。

# ホストコンピュータを識別する方法

私たちのコンピュータは通常ある空間に閉じ込められています。これを LAN と呼びます。たとえば、おなじWi-Fiに接続しているコンピュータは同じ LAN に所属しています。

今回は同一 LAN 上にあるコンピュータが通信するときの例を話します。つまり、書斎のコンピュータからリビングのラズパイに接続するときのような場合を想定しています。帰省した実家から自宅のコンピュータにつなぐときは、たいていもっと複雑な手順が必要です。今回は触れませんが、具体的にはVPN を使うか、IPv6を使う必要があります。（自分で回線を引いている人は話は別ですが、そういった人はこの記事を必要とはしないでしょう）

今、あるゲストコンピューターから、Linux のホストコンピューターを動かしたいと思ったとします。ホスト・ゲストの代わりにサーバ・クライアントということもあります。

![ssh.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2986389/89bf6e97-11cb-fe69-f22c-6aa1574ef881.jpeg)

あなたがホストコンピュータを立ち上げたとき下のように表示されていたとします。

```txt: ホストコンピュータ
apple@banana:~$
```

このとき、ホストコンピュータでのあなたのユーザ名は `apple` で、コンピュータは `banana` という名前だとわかります。

ネットワーク上のコンピュータは IP アドレスで認識されます。では、現在のコンピュータの IP アドレスを調べてみましょう。二つのコマンド `ip a` と、`hostname -I` を打ってみましょう。以下は出力例です。

```txt: ホストコンピュータ
apple@banana:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 6a:8b:fd:04:3e:52 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.88.0.3/16 brd 10.88.255.255 scope global eth0
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:0f:26:1c:01 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
apple@banana:~$ hostname -I
10.88.0.3 172.17.0.1 
```

`ip a` の `a` はアドレスの略で、IP アドレスに関する情報を出力します。

`inet` から始まる行の左側の `/` までが使用する IP アドレスです。 `hostname -I` もまた IP アドレスを出力します。今出力が `10.88.0.3`, `172.17.0.1` の二つ出ていますが、どちらを使うべきでしょうか？`inet 172.17.0.1` のところを見てみるとその上に、 `3: docker0` と書かれています。docker とは仮想マシンみたいなものです。ですから、あなたは`10.88.0.3` のほうに接続すればよいことがわかります。

ところで、最初のほうに `inet 127.0.0.1` ともかかれていますね。これは、自分のコンピュータを指している IP アドレスで、すべてのコンピュータで同じアドレスです。たとえどんなネットワークに接続していなくても、この IP アドレスは機能します。

# ターミナルでの接続

では、ゲストコンピュータの前に移動して、ターミナルから ssh 接続してみましょう。おそらくもっとも簡単な接続方法です。コマンドの書式は `ssh <ユーザ名>@<IP アドレス>` です。

```bash: ゲストコンピュータ
$ ssh apple@10.88.0.3 # 例
```

初回の接続では、「本当に ssh 接続しますか？」みたいなことを聞かれるので `yes` と打ち込みましょう。`y` と打つと接続できません。

接続を終了するときは、Ctrl+D で抜けられます。

# Visual Studio Code で接続する

では、VSCodeから、接続してみましょう。今回は一番簡単なログインパスワード方式を使います。

拡張機能の `Remote-SSH` をいれておきます。そうしたら、画面左下の `><` のようなところをクリックします。すると、「ホストに接続する... Remote-SSH」 というのが出てくるので、クリックします。すると、「+新規 SSH ホストを追加する...」というのがでてくるので、それをクリックします。すると、「E.g ssh hello@microsoft.com -A」という入力スペースが出てくるので、そこに `<ユーザ名>@<IP アドレス>` と入力しEnter キーを押します。すると、「更新する SSH 構成ファイルを選択する」という入力スペースが出てくるので、好きなconfigファイルを選択します。（どちらでも構いません）これで設定は終わりです。

ではもう一度、画面左下の `><` のようなところをクリックしてみましょう。次に、 「現在のウィンドウをホストに接続する...」をクリックします。すると、IPアドレスの選択が出るので、接続したい IP アドレスをクリックします。すると、「apple@10.88.0.3のパスワードを入力する」というような入力スペースがでてくるので、パスワードを入力して、Enter キーを押します。

すると、「apple@10.88.0.3のパスワードを入力する」というような入力スペースがまた出てくるので**無視して**、左側エクスプローラの「フォルダーを開く」をクリックします。そして、開きたいホルダー（たいていホームディレクトリ）を選んで「OK」を選択します。するとまた、「apple@10.88.0.3のパスワードを入力する」というような入力スペースがでてくるので、パスワードを入力して、Enter キーを押します。

すると、「apple@10.88.0.3のパスワードを入力する」というような入力スペースがしつこくまた出てくるので（4回目）無視して、Escキーを押します。


終了するときは、また左下の `><` のようなところをクリックして、一番下の「リモート接続を終了する」をクリックします。