SSHキーの作り方

# SSHキーが必要な理由


その昔、一般の人がインターネットをほとんど使っていなかった時代はrsh(リモートシェル)やTelnetとかのコマンドで他のサーバのシェルを操作していましたが、利用者が増えるに従ってセキュリティリスクが増え、暗号化の要件が出て来ました。

:::note
1990年代中頃までかなりセキュリティ関係はゆるゆるでUNIXのx端末はデフォルトでxhost +になっていました。
これは何を意味しているかというと、x端末から他のx端末の画面を見る事ができたり、他のx端末を操作したりできました。
当時、xjokeとかいうxアプリがあって授業中に友人のx端末の画面をぐるぐる渦巻き状に溶かしたりして遊んでいました・・・
:::

rshやtelnetは暗号化せずに平文を送るため、スニファーでパケットキャプチャすると通信内容が丸見えです。
ハンドシェイクのsyn/ackとかも全て見れるので入力したパスワードもその気になれば全て見えてしまいます。

:::note
サービスが生きているかサービスのポートにSynパケットを送って応答を確認したりしていました。
:::

そこで、暗号化キーを使って暗号化した内容で通信するプロトコルができSSHとなりました。
UNIX（Linux含む）系のOSのシェルにセキュアにログインするためにはSSHキーのパブリックキーをサーバ側に登録し、秘密鍵を用いてログインします。


# SSHキー（ペア）の作り方
ここではWindowsでSSHキーを作る方法を説明します。
必要なアプリはTelnet時代から第一線で活躍している[Teraterm](https://forest.watch.impress.co.jp/library/software/utf8teraterm/)です。
Teratermがインストールされている前提で説明します。

Teratermを起動すると「新しい接続」のウィンドウが開きますが、右上の「ｘ」をクリックして閉じます。
![tt1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/0a5c7065-344a-5f6b-167a-642d368d9377.jpeg)
次に「設定」メニューの中の「SSH鍵生成」を選択します。
![tt2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/8406d765-fa45-7319-e7e7-9197cf69b2ea.jpeg)
デフォルトの
【鍵の種類】RSA
【ビット数】2048
の状態のまま「生成」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/48e4f2f3-4f16-857d-7b27-3c9af5c2bf64.png)
数秒かかって鍵が生成されると「公開鍵の保存」と「秘密鍵の保存」ボタンが活性化されてコメント欄にはWindowsのログイン名とかが入力されると思います。
![tt3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/a3da62b7-90ea-e8ab-3164-208a847f4385.jpeg)
コメントは任意なので何でも大丈夫です。
ここで「公開鍵の保存」を押下するとファイル保存ダイアログが出てきて公開鍵を保存する事ができます。
![tt4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/a26fc109-e8fc-8bca-c775-c6d0ce989aa4.jpeg)
「秘密鍵の保存」ですが、鍵のパスフレーズを入力するとログインの時に秘密鍵以外にパスフレーズが必要になりますが、空白でも生成できます。
今回は空白パスフレーズで生成してみます。
空白だと一応メッセージが出ますが「はい」を押して保存します。
![tt5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/d4b7fb72-3946-07f4-e95b-ee026c1a40c6.jpeg)
![tt6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/7fa845b8-296c-0aa9-ae0b-e8fb7216c1b7.jpeg)
鍵は必ず、公開鍵と秘密鍵がペアで必要になりますので両方忘れずに保存してください。
二つの鍵でワンセットなので「**キーペア**」と呼びます。

# OCIでの使い方
SSHではサーバ側に公開鍵を設置します。
ネットワークを介さずにKVM等で直接サーバにアクセスできる場合はサーバを構築した後にサービスとしてSSHを設定して所定の場所に鍵を置く事でサーバ側の公開鍵を設置できますが、OCIの場合、必ずネットワークを通してのサーバアクセスになり、最初のアクセスからSSHでのアクセスが必要になります。
そのため、OCIの場合はインスタンス作成時に公開鍵を設定します。

具体的な方法は次回、サーバ構築説明を書こうと思いますのでそちらで説明させて頂きます。
ここでは既にキーペアの公開鍵がサーバに設置されているサーバへのアクセスを説明します。

サーバのIPアドレス（又はドメイン）、ユーザー名がわからない場合はOCIコンソールのインスタンスメニューの該当インスタンスの詳細を見ると右の方に書いてあります。
![server.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/aa2847e4-5b57-3055-7cb2-22662a71f99e.jpeg)
OracleLinuxの場合はユーザー名はopcになります。
Teratermを起動し、ホスト欄にサーバのIPアドレスを入力し、「OK」を押下します。
![tt7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/cd120f59-a51b-95b7-7a36-420894949427.jpeg)
そのサーバに初めてアクセスする場合はセキュリティ警告がでますので「続行」を押下します。
![tt8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/aa5d7f95-05f9-194c-4882-7589b1e70cb5.jpeg)

ユーザー名にopcを入力し、RSA/DSA/ECDSA/ED25519鍵を使うのラジオボタンの選択します。
![tt9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/835cf522-8e5c-adf7-f23b-006fc6f5f9c8.jpeg)

秘密鍵ボタンが活性化するので押下します。
![tta.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/0cd0e0ce-461c-5f26-7b35-411c8dea14bd.jpeg)
ファイル選択ダイアログでキーペアの秘密鍵の方を選択して「開く」を押下します。
![ttb.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/e3b52348-6e17-a793-d81a-5a327345fddb.jpeg)

秘密鍵がセットされたのでこの状態で「OK」ボタンを押下するとサーバに接続できます。
![ttc.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/813f1f41-0475-0de8-fc4c-c6947e8f097b.jpeg)

:::note warn
キーペア生成時にパスフレーズを入力した場合はユーザー名欄の下のパスフレーズ欄に入力しないとエラーになります
:::

無事に接続されるとシェルのプロンプトが表示されます。
![ttd.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2367692/bf891545-823c-46bc-3ffe-f7902d7b133c.jpeg)

以上、SSHキーの作り方、使い方でした。