この記事はssh ~~と入力するだけでパスワードを入れずにVMに入って作業することができるようになる記事です。

この記事ではクライアント側の操作は(クライアント)、ホスト側の操作は(ホスト)と書いてあります。 卒業課題(22).jpg (62.6 kB)

前提(クライアント)

環境

  • 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
初めて config を編集するときはこの様な警告が出るので「はい(Y)」をクリックしてください。 image.png (22.8 kB)

以下の様に書き加えます。 ```.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 <ホストに入れた名前>
でログインできることを確認してください。

参考文献