どうもこんにちは!
サバ缶(@tech_begin)です。
SSHってなんだろう?
VPSを契約したとき、AWS上のサーバにアクセスするとき、GitHubと接続するとき。
たびたび目にしますが、中身について知らないままにしていませんか?
ということで、復習がてら学んだことをまとめてみました。
SSHとは
SSHは『Secure Shell(セキュアシェル)』の略称です。
ネットワークを通じて、別のコンピュータを遠隔操作する際に使用されるプロトコルです。
自社サービスのサーバを遠隔で操作したりする際に使用します。
例えば『AWS上にあるサーバを操作する』などです。
AWSはクラウドなので、実体がありません(厳密にはありますが、現地にまで行って操作するとなると大変な労力がかかります)。
SSHの利用目的
サーバ内で直接操作可能
オンプレミスなどのサーバだと、現地で直接サーバを操作することがありました。
また、SSHが普及する前に使われたTelnetというプロトコルでは、毎回ローカルにファイルを落として編集→アップロードするという手間が発生していました。
SSHではサーバ内部に直接アクセスできるため、ファイルの編集なども可能です。
(しかし同時に重要なデータを上書き・紛失するリスクも発生するため、バックアップは必須です)
機密性を高める
実際に稼働しているサーバを遠隔操作するとなると、機密性が求められます。
通信内容を傍受されてしまうと、セキュリティ事故につながりかねません。
SSHは名前の通り、Secure(安全、保証された、確実)な通信を行うことができます。
通信内容が暗号化されるため、悪意を持った攻撃者に漏れるリスクを減らします。
SSHの仕組み
SSHの認証方式
SSHの代表的な認証方式は2つあります。
- パスワード認証方式
- 公開鍵認証方式
作業的には、公開鍵認証方式の方が複雑でむずかしいですがセキュリティとしては強固です。
SSHキーを作成する
実際にSSHキーを作成してみましょう。今回は、Macで行います。
# 初めてSSHキーを作成する方向け
$ cd ~/.ssh # SSHキーを格納するディレクトリへ移動。初めてであれば何も入っていない
$ ssh-keygen -t rsa # 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:
【補足】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.