この記事はssh ~~と入力するだけでパスワードを入れずにVMに入って作業することができるようになる記事です。
この記事ではクライアント側の操作は(クライアント)、ホスト側の操作は(ホスト)と書いてあります。

前提(クライアント)¶
環境¶
- windows10
- powershell7
公開鍵は作成済み¶
既にsshの鍵が作成されている前提。鍵がない場合は【完全版】研究室にSSHする方法を参考に作成してください。今回は共通鍵 id_ed25519 、 秘密鍵 id_ed25519 を使用します。違う鍵を使用するときは以降、名前が id_ed25519 を自分が使う鍵の名前に置き換えてやってみてください。
dirコマンドで鍵があるか確認します。.pub が付いているのが公開鍵です。
dir .ssh
Directory: C:\Users\ユーザー名\.ssh
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2021/07/08 11:41 350 config
-a--- 2020/08/12 13:09 419 id_ed25519
-a--- 2020/08/12 13:09 109 id_ed25519.pub
-a--- 2020/09/15 7:32 607 id_ed25519.zip
-a--- 2018/12/22 14:01 1766 id_rsa
-a--- 2018/12/22 14:01 406 id_rsa.pub
-a--- 2021/07/08 10:51 4641 known_hosts
設定ファイルを変更する(クライアント)¶
notepad .ssh\config
以下の様に書き加えます。 ```.ssh/config ForwardAgent yes
Host <自分が入れたい文字> Hostname <VM名> User <ユーザー名> Port 22 IdentityFile ~/.ssh/id_ed25519
| 属性 | 値 |
| -------- | -------- |
| ForwardAgent | 既に書いている場合は入れなくていいです。 |
| Host | VM 名だと覚えやすいですが、好きな文字を入れましょう。最終的にターミナルに「ssh 自分の入れた文字」を入力することで VM に ssh 接続します。 |
| Hostname | VM 名、もしくは IP アドレスを入力しましょう。 |
| User | VM に登録したユーザー名を入力してください。 |
| Port | デフォルトは22番です。VM側で Port 番号を変更しているなら変更した Port 番号を入力してください。 |
| IdentityFile | 秘密鍵の場所を入力します。今回は id_ed25519.pub の共通かぎを VM に登録するので、秘密鍵 id_ed25519 を登録します。 |
# 公開鍵を出力(クライアント)
type コマンドで公開鍵の中身を出力します。今回は id_ed25519 の公開鍵を出力しました。人によって中身は異なります。
```sh
type .ssh\id_ed25519.pub
.ssh\id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOGUGAcDwGbouvf+XQc12u2MI0blfYvChq8AzYOTIZEC c01180500b@LAPTOP-KF4IA0NC
# サーバ側(VM側)の操作(ホスト)
以下に書いてあるのは[設定ファイルを変更する(クライアント)](https://cdsl-tut.esa.io/wiki/503#%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%EF%BC%88%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%EF%BC%89)で入力した<ユーザー名>と同じユーザーでログインしているときの操作です。
> <details><summary> 自分とは違うユーザーがssh公開鍵認証できるようにする方法はこちら</summary><div>
> ユーザーを追加していない場合はユーザーを追加する。
>
> -s オプションは特定のログインシェルを持つユーザーの作成ができます。デフォルトは/bin/shなので/bin/bashに変更します。
>
> 追記2021年8月2日:
> shはBourne Shellへのシンボリックリンクです。Linuxにおける基本的なshellはBourne Shellとなります。bashはBourne Again shellへのシンボリックリンクで、shの後継shellです。
>
> -m オプションはユーザーディレクトリを追加するオプションのことです。
>
> ```sh
> sudo useradd -s /bin/bash -m <ユーザー名>
> ```
> ユーザーが追加されているか確認しましょう。
> ```sh
> cat /etc/passwd | grep <ユーザー名>
> ```
> ```
> <ユーザー名>:x:1002:1002::/home/<ユーザー名>:/bin/sh
> ```
> sudo できるようにしたい場合は以下のコマンドを入力してください。
> 追記2021年8月2日:
>
> | 短いオプション | 長いオプション | 意味 |
> | -------- | -------- | -------- |
> | -G <グループ名> | --groups <グループ名> | セカンダリーグループを変更する(複数ある場合は「,」で区切って指定)。変更ではなく追加したい場合は「-a」オプションを同時に指定する |
> | -a | --append | 「-G」オプションで指定したグループをセカンダリーグループに追加する。これのオプションをつけないと既に所属済みのセカンダリーグループからユーザーを削除されます。 |
>```
> sudo usermod -aG sudo <ユーザー名>
>```
> .ssh のファイルを追加します。
> ```sh
> cd /home/<ユーザー名>/
> sudo install -m 700 -d .ssh
> ls -la
> ```
> ```
> total 12
> drwxr-xr-x 3 root root 4096 Jul 9 01:26 .
> drwxr-xr-x 5 root root 4096 Jul 9 01:26 ..
> drwx------ 2 root root 4096 Jul 9 01:26 .ssh
> ```
> 公開鍵をホスト側に登録します。
> ```sh
> sudo vim .ssh/authorized_keys
> ```
> [先ほど出力した公開鍵(.pub)](https://cdsl-tut.esa.io/wiki/503#%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E5%87%BA%E5%8A%9B%EF%BC%88%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%EF%BC%89)の記述をそのままコピペして追加してください。すでにファイル内に何か書いてあった場合、改行して追加してください。
> ```.ssh/authorized_keys の例
> ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOGUGAcDwGbouvf+XQc12u2MI0blfYvChq8AzYOTIZEC c01180500b@LAPTOP-KF4IA0NC
> ```
> 今のままだとrootユーザーが所有者となっているので<ユーザー名>が所有者となるように変更します。
> Before
> ```sh
> sudo ls -la .ssh/
> ```
> ```
> total 12
> drwx------ 2 root root 4096 Jul 9 01:28 .
> drwxr-xr-x 3 root root 4096 Jul 9 01:26 ..
> -rw-r--r-- 1 root root 108 Jul 9 01:28 authorized_keys
> ```
> After
> chmod で`authorized_keys`の所有者の読み込みと書き込みを許可します。
> chown で`authorized_keys`と`.ssh/`の所有者とグループを変更します。`chown Owner:Group filename`
> ```sh
> sudo chmod 600 .ssh/authorized_keys
> sudo chown <ユーザー名>:<ユーザー名> .ssh/authorized_keys
> sudo chown <ユーザー名>:<ユーザー名> .ssh/
> sudo ls -la .ssh/
> ```
> ```
> total 12
> drwx------ 2 root root 4096 Jul 9 01:28 .
> drwxr-xr-x 3 root root 4096 Jul 9 01:26 ..
> -rw------- 1 <ユーザー名> <ユーザー名> 108 Jul 9 01:28 authorized_keys
> ```
> .ssh も同様に確認します。
> ```sh
> sudo ls -la
> ```
> ```
> total 12
> drwxr-xr-x 3 root root 4096 Jul 9 01:26 .
> drwxr-xr-x 5 root root 4096 Jul 9 01:26 ..
> drwx------ 2 <ユーザー名> <ユーザー名> 4096 Jul 9 01:28 .ssh
> ```
> これで操作は完了です。[確認](https://cdsl-tut.esa.io/wiki/503#%E7%A2%BA%E8%AA%8D%EF%BC%88%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%EF%BC%89)に移ってください。
> </div></details>
.ssh があることを確認してください。
```sh
cd
ls -a
. .. .bash_history .bash_logout .bashrc .cache .profile .ssh .sudo_as_admin_successful .viminfo
ある場合
chmod 700 .ssh
ない場合
install -m 700 -d ~/.ssh
公開鍵をホスト側に登録します。
vim .ssh/authorized_keys
[先ほど出力した公開鍵(.pub)](https://cdsl-tut.esa.io/wiki/503#%E5%85%AC%E9%96%8B%E9%8D%B5%E3%82%92%E5%87%BA%E5%8A%9B%EF%BC%88%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%EF%BC%89)の記述をそのままコピペして追加してください。すでにファイル内に何か書いてあった場合、改行して追加してください。.ssh/authorized_keys の例
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOGUGAcDwGbouvf+XQc12u2MI0blfYvChq8AzYOTIZEC c01180500b@LAPTOP-KF4IA0NC
`authorized_keys`を root ユーザーのみが読み込みと書き込みをできるようにします。
```sh
chmod 600 .ssh/authorized_keys
確認(クライアント)¶
自分のPCに戻って
ssh <ホストに入れた名前>
参考文献¶
- ssh 公開鍵認証
- ファイルの所有者や許可
- ユーザー
- 追記
- shとbashとは?
- アカウントをsudoグループに所属させる