##はじめに
githubやgitlabなどのバージョン管理ツールで「SSH接続」なんてよく聞くかと思います。
ですが、駆け出しエンジニアの僕は、SSH?ってとても疑問に思いました。
なんのためにSSH接続?とやらを行うのか、そもそもSSHとはなんなのか?
という疑問を調べてまとめていきたいと思います。
ぜひ参考にしていただければと思います。
##対象読者
- プログラミング初心者
- 駆け出しエンジニア
- SSHってなんぞや?って方
##SSHとは
「Secure Shell」の略で、ネットワークに接続された機器を遠隔操作し、管理するための手段。
Secureとは安全という意味で、どうやら安全にネットワーク機器を遠隔操作する手段みたいだ。
リモートコンピュータと通信するためのプロトコル。
従来のtalnet⇨パスワードでもなんでもそのまま送る(平文をそのまま送る)
SSH⇨暗号化して送信
###メリット
ネットワーク上の全ての通信が暗号化されるため安全に通信が行える。
認証の仕組みが多様化している。(パスワード、公開鍵、ワンタイムパスワード等)
##SSHを使う理由
現代において、各種サーバー機器は、ほとんどの場合、操作する人から離れた場所にある。
操作する人が安全にインターネット経由で接続できる手段が必要となる。
理由としては、第三者がサーバーにログインできてしまうと、サーバー内でよからぬ操作をされてしまう可能性があるから。
SSHを利用すると、サーバーに安全に接続しできる。
##SSLとは?
似たような言葉で「SSL」というものがある。
下記のような違いがある。
SSH⇨サーバーに接続するのが目的でサーバーの管理者が対象者となる
SSL⇨Webサイトを安全に表示し、Webサイトの閲覧者が対象者となる。
##認証方法
離れた場所にあるサーバへ安全に接続するため、
サーバーへのログインの適正チェックの方法は複数用意されている。
###パスワード認証方式
認証方法:パスワード
安全度:低い
####メリット
設定が簡単
####デメリット
パスワードがバレると終わる(泣)
###公開鍵認証方式
認証方法:「公開鍵」など生成したファイル
安全度:高い
####メリット
暗号化して通信を行い、暗号化した内容を解読するのに秘密鍵がないと解読できないから。
そこまで設定も難しくない。
####デメリット
なんだろう?
秘密鍵を見られたら終わる
公開鍵認証方式の流れ
①クライアント側で秘密鍵・公開鍵を作成
②公開鍵をサーバー側に預ける
③ログインしようとする
④サーバー側で公開鍵で暗号作成
⑤サーバー側からクライアント側に暗号を渡す。
⑥クライアント側で秘密鍵を復号
⑦複合した情報をサーバー側に渡す
⑧既存情報と一致することを確認する
現在は公開鍵認証方式が主に使われている。
###SSH鍵の作り方
環境:Mac OS Big Sur (M1チップ)
ルートディレクトリにて
ssh-keygen -t rsa
こちら打ちますと、パスワードが必要かどうかなどが聞かれますが、
特に必要がなければ全て「Enter」でOK。
##SSH鍵が作成されたかの確認方法
ルートディレクトリにて
ls -a
表示されたディレクトリの中に、.sshがあれば成功。
※ ls -a ディレクトリを全て表示する
lsだけだと隠されたディレクトリが表示されないので注意。
Finderのホームディレクトリで、
Shift+command+.
でも見ることができます。
cat .ssh/id_rsa.pub
上記コマンドで公開鍵の内容を見ることができます。
ちなみに.sshの中身ですが、.pubがついているのが公開鍵です。
id_rsa⇨秘密鍵
id_rsa.pub⇨公開鍵
##終わりに
調べているとSSHについてなんとなくわかるようになってきました。
簡単にまとめると
クライアント側で、鍵を二つ作る。
公開していい鍵と、絶対公開してはならない鍵。
公開鍵をサーバー側と共有。
データをクライアント側からサーバー側に投げると、
サーバー側がデータを暗号化してクライアント側に返す。
その暗号は絶対公開してはならない鍵でしか読み解けない。
みたいな感じかな(どんな感じだよ。)
間違ってたらすいません。。。💦
##参考記事一覧