【必見】SSH(Secure Shell)の目的と仕組みについて理解しよう!実際にSSHキーも作成!

ソフトウェア群の画像サービスとプロトコル
サバ缶
サバ缶

どうもこんにちは!
サバ缶(@tech_begin)です。

とある人
とある人

SSHってなんだろう?

VPSを契約したとき、AWS上のサーバにアクセスするとき、GitHubと接続するとき。

たびたび目にしますが、中身について知らないままにしていませんか?

ということで、復習がてら学んだことをまとめてみました。

SSHとは

SSHは『Secure Shell(セキュアシェル)』の略称です。

ネットワークを通じて、別のコンピュータを遠隔操作する際に使用されるプロトコルです。

自社サービスのサーバを遠隔で操作したりする際に使用します。

例えば『AWS上にあるサーバを操作する』などです。

AWSはクラウドなので、実体がありません(厳密にはありますが、現地にまで行って操作するとなると大変な労力がかかります)。

ちなみに、このSSHというプロトコルを使って、SSH接続するソフトウェアを『SSHクライアント』と呼びます。
例:TeraTerm、iTermなど

SSHの利用目的

サーバ内で直接操作可能

オンプレミスなどのサーバだと、現地で直接サーバを操作することがありました。

また、SSHが普及する前に使われたTelnetというプロトコルでは、毎回ローカルにファイルを落として編集→アップロードするという手間が発生していました。

SSHではサーバ内部に直接アクセスできるため、ファイルの編集なども可能です。

(しかし同時に重要なデータを上書き・紛失するリスクも発生するため、バックアップは必須です)

機密性を高める

実際に稼働しているサーバを遠隔操作するとなると、機密性が求められます。

通信内容を傍受されてしまうと、セキュリティ事故につながりかねません。

SSHは名前の通り、Secure(安全、保証された、確実)な通信を行うことができます。

通信内容が暗号化されるため、悪意を持った攻撃者に漏れるリスクを減らします。

SSHの仕組み

引用(https://www.kagoya.jp/howto/it-glossary/server/ssh/)
引用(https://implist.dev/entries/6f5e2d1d364ddc1d0adc5e84494619cc)

SSHの認証方式

SSHの代表的な認証方式は2つあります。

  • パスワード認証方式
  • 公開鍵認証方式

作業的には、公開鍵認証方式の方が複雑でむずかしいですがセキュリティとしては強固です。

SSHキーを作成する

実際にSSHキーを作成してみましょう。今回は、Macで行います。

# 初めてSSHキーを作成する方向け
$ cd ~/.ssh # SSHキーを格納するディレクトリへ移動。初めてであれば何も入っていない
$ ssh-keygen -t rsa # SSHキーを作成(id_rsa, id_rsa.pubの2つが生成)

すでにSSHキーを作成していて「id_rsa」と「id_rsa.pub」の2つがある場合は、上書きされてしまいます。

# すでにSSHキーを作成していて、違う名前で作成したい方向け
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/yamada/.ssh/id_rsa): id_github_rsa # ここで名前指定する
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

名前を指定しない場合は、`~/.ssh`ディレクトリ内部でSSHキーを生成してくれますが、名前を指定した場合は`~/.ssh`ディレクトリではないところに生成されます。ご注意ください。

【補足】GitHubとの接続方法

$ pbcopy < ~/.ssh/id_git_hub_rsa.pub # クリップボードに公開鍵の中身をコピー

GitHubの設定画面を開き「Access >SSH and GPG keys >SSH keys」で「New SSH key」をクリックし、新しいSSHキーを登録します。

ここで何をやっているかというと、ローカルで作成した公開鍵をGitHubに登録しています。

$ ssh -T yamada@github.com # 接続確認
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

ダメだったっぽい。
~/.ssh内に『config』ファイルを作成し、GitHubへの接続情報を設定する。

$ ssh-keygen -R github.com
# Host github.com found: line 1
/Users/yamada/.ssh/known_hosts updated.
Original contents retained as /Users/yamada/.ssh/known_hosts.old

$ ssh -T yamada@github.com
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+xxxx/xxxx

This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
yuutarou22@github.com: Permission denied (publickey). # ありゃ。権限拒否された。

こっちだと実行できた!
$ ssh -T git@github.com
Hi yamada! You've successfully authenticated, but GitHub does not provide shell access.

エラー時の参考

https://www.niandc.co.jp/tech/20150729_2464/
git@github.com: Permission denied (publickey). となったので解消方法を調査した | DevelopersIO
今回の原因は全角スペースが含まれているという凡ミスでした
GitエラーPermission denied (publickey).の解決方法 - Qiita
Gitでpushしようとしたらエラーになりました。エラーメッセージターミナルから返ってきたエラー文は下記の通りです。git@github.com: Permission denied (pub…

参考サイト

403 Forbidden
SSHとは?仕組みとSSHサーバーの設定をわかりやすく解説します! - カゴヤのサーバー研究室
SSHとは「Secure SSHとは「Secure Shell」の略で、ネットワークに接続された機器を遠隔操作し、管理するための手段です。ポイントはSecure(安全)に!で、そのために必要な仕組みが用意されています。この記事では初心者の方にも分かるように、あらためてSSHの概要や設定方法などの基本を解説します。
SSHとは?仕組みを図解でわかりやすく解説!
今回は「SSHの仕組み」について図解でわかりやすく解説していきます。 SSHはAWSやローカル開発環境などを使う場合には、ほぼ必須と言っていいほど必要な技術です。 なんとなくサーバに接続できたけど、「SSHとは何か?」、「公開鍵ってなに...
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita
GitHubにssh接続するために鍵の登録が必要になります。その手順をまとめてみます。はじめての人は手順通りに進めれば接続出来ます。久しぶりにやってうまくいかないという人の解決の糸口になるよう…
タイトルとURLをコピーしました