ssh概要

## はじめに
はじめに本ドキュメントはsshについてまとめたものである。linuxなどの仮想マシンにアクセスする際によく使用するため仕組みついて詳しくなっておく必要があると感じたためまとめている。

## sshとは

![sample.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693671/e1faf3c3-9dae-4c46-70a4-79d9f3fb790e.png)

Secure SHellの略称でセキュアな遠隔接続を可能にする。具体的には通信内容を暗号化するためパスワードやコマンドの処理結果がわからなくなる。

### 用途
* サーバの遠隔操作
* ファイルの転送
* コマンドの実行

|   |パスワード認証方式   |公開鍵認証方式   |
|:-:|:-:|:-:|
|手段   | ユーザ名とパスワードによるログイン  |クライアント側で作成した公開鍵をサーバ側に登録してログイン   |
| 安全性  |低い   |高い   |
|導入難易度   |容易   |やや手間がかかる   |



## 仕組み

OpenSSHというソフトウェアを使用する。OpenSSHとは、クライアントと遠隔にあるサーバどちらともに入れておく必要がある。（基本的にはUnix/Linux OSだとデフォルトで入っている。）

![sample2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693671/697fc159-b4a3-af20-6ead-3f52f96fafd8.png)


SSHクライアントからアクセス要求が来た時にSSHデーモンがログイン認証を行う。この<<認証方式>>が2種類存在する。

:::note info
デーモン：常駐のアプリのことで、クライアントからの要求に応えるためにサービスが常に稼働している。
:::

### パスワード認証
パスワード認証では、サーバ側のマシンのユーザ名とパスワードをSSHデーモンがクライアント側に要求する。クライアント側で入力を行い、正しければログインすることが可能となる。

:::note warn
総当たり攻撃などに遭うと突破されるリスクがあるため注意すること
:::

### 公開鍵認証
公開鍵認証では、クライアント側で作成した公開鍵（認証鍵）と秘密鍵を用いる。鍵とはいっているが実際はファイルのことである。

#### 認証鍵
* 公開鍵認証でユーザを識別するための鍵

![sample3.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/693671/41d97a19-aa03-3163-ddd7-d90b8c06ddd5.png)


### 公開鍵認証方式の手順
1.（クライアント）秘密鍵と公開鍵のペアを作成
2.（クライアント）公開鍵をサーバに共有
3.クライアントとサーバでセッションIDを共有
4.（クライアント）秘密鍵でセッションIDと公開鍵に対して署名を作成
→セッションIDによって署名のユニークなものにする

<details>
<summart>署名の中身</summary>
* セッションID
* ユーザ名
* 公開鍵
* etc.
</details>

5.（クライアント）署名をサーバに送信
6.（サーバ）公開鍵で署名を複合化し、署名の検証

## ssh接続方法
公開鍵認証を用いたssh接続方法を示す。

秘密鍵と公開鍵の生成::
以下のようにクライアント側で秘密鍵と公開鍵のペアを作成して``scp``コマンドを用いてサーバ側に共有する。

```
#ホームディレクトリ直下に``.ssh``フォルダを作成
sudo mkdir .ssh

cd .ssh

#鍵の生成
ssh-keygen -t rsa -b 4096 -f <鍵の名前>

#公開鍵をサーバに渡す
scp -P 22 <公開鍵のパス> <サーバ側ユーザ名>@<サーバ側IPアドレス>:<公開鍵を配置するパス>

#クライアント側の権限を変更
chmod 700 ~/.ssh

#サーバ側の権限を変更
chmod 600 ~/.ssh/authorized_keys
```

接続確認::
```
ssh <ユーザ名>@<IPアドレス>
```

:::note info
パスフレーズ：鍵セット作成時に問われるが、これは秘密鍵にアクセスするためのパスワードに該当する。
:::

:::note warn
コマンドが使えるかわからないが、流れは合っている。
:::

## 参考文献
「マスタリングTCP/IP入門編5章」 p285~

[qiita:初心者がSSHについて学ぶ(´･ω･`)](https://qiita.com/shobooon/items/70cc74cd20c8b5b4fe15)

[qiita:インフラエンジニアじゃなくても押さえておきたいSSHの基礎知識](https://qiita.com/tag1216/items/5d06bad7468f731f590e)

[zenn:SSHにおける公開鍵・秘密鍵を用いた認証方法をちゃんと理解しておく](https://zenn.dev/luvmini511/articles/0e471affdcba52)

[zenn:SSHの公開鍵認証とは何をやっているのか？](https://zenn.dev/tetsu1008/articles/8027cbab954e5e)

[さくらのナレッジ:「よく分かる公開鍵認証」～初心者でもよくわかる！VPSによるWebサーバー運用講座(2)](https://knowledge.sakura.ad.jp/3543/)

[qiita:SSHの公開鍵ってなに?](https://qiita.com/angel_p_57/items/19eda15576b3dceb7608#%E5%85%AC%E9%96%8B%E9%8D%B5%E8%AA%8D%E8%A8%BC%E3%81%AE%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8)

[qiita:SSHの公開鍵認証における良くある誤解の話](https://qiita.com/angel_p_57/items/2e3f3f8661de32a0d432)

[zenn:SSHのユーザー認証についてすこしだけ詳しくなるはなし](https://zenn.dev/ncdc/articles/ssh-userauth)


[qiita:chmod コマンド](https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95)

[qiita:公開鍵暗号を用いてのSSH接続（きほん）](https://qiita.com/mukoya/items/f20def019e25dc162ca8)

[qiita:SSH公開鍵認証で接続するまで](https://qiita.com/kazokmr/items/754169cfa996b24fcbf5)


[qiita:公開鍵認証方式でのssh接続・設定・トラブルシューティング法](https://qiita.com/StoneDot/items/a38a35baf50e2cba2b67 )