サーバー周りを触るようになると、
SSH鍵の生成や交換も自分でやる必要が出てきた。
LPIC1の取得時に勉強したきりで、理解があやふやになっていた部分もあるので改めて勉強してまとめてみる。
SSHとは
SSH(Secure Shell)とは、安全にネットワーク上の他のサーバー等にログインするためのプロトコル。
"安全"の部分は通信経路の暗号化によって行われる。
OpenSSHとは
SSHプロトコル利用のためのソフトウェア。
サーバー、クライアントの役割を備えたソフトウェア。
現在の最新バージョンは8.0。
SSHとOpenSSHの違い
SSHはプロトコルで、OpenSSHはソフトウェア。
SSHという安全な通信をするための決まりや仕組みがSSH。
SSHという決まり、仕組みを実際に使えるようにしたソフトウェアの一つがOpenSSH。
UML図にすると下のように表現できるかな。
OpenSSHはSSHの実現方法の一つなので、もちろん他にもソフトウェアはあって、
例えばTera TermやRSIT(Reflection for Secure IT)もSSHを実現したソフトウェアの一つとなる。
SSLとSSHの違い
SSH:リモート先のシェルとの接続を暗号化する。認証を伴う。
SSL:インターネット上の通信を暗号化する。認証を伴わない。
SSLは認証はなく、公開鍵方式による暗号化のみ。
認証ではなくて、公開鍵基盤という仕組みを利用した場合に接続先の公開鍵の実在証明は行われる。
※ここらへん、こんがらがってくる理由の一つが、
OpenSSHを利用するためにはOpenSSLも導入しないといけないということ!
仕組み
OpenSSHはクライアントからサーバーにログインが試みられると2種類の認証、ホスト認証とユーザー認証が行われる。
●ホスト認証
接続先のサーバーが正しいサーバーかを確認する。
事前にサーバーとの間で交換していた公開鍵がクライアントの known_hoss ファイルに書き込まれているので、
known_hostsの内容とサーバーから送られてきた公開鍵を比較して、
同じものであれば接続先が想定していたサーバーとして認証する。
●ユーザー認証
サーバー側が接続元のクライアントが正しいユーザーかを確認する。
SSHのユーザー認証ではパスワード認証と、公開鍵認証がよく使われる。
パスワード認証:文字通りユーザーが入力するパスワードが接続先サーバーに存在するユーザーのパスワードと同じか確認する。
公開鍵認証:接続元の公開鍵をあらかじめ接続先サーバーにあるログインユーザーの~/.ssh/authorized_keysファイルに登録しておく。
接続元が接続先サーバーに接続する際に公開鍵を送り、サーバー側で~/.ssh/authorized_keysファイルの内容と比較して同じか確認する。
これらの認証を正常に終えると、接続先サーバーでシェルの操作が行えるようになる。
実践:ホスト認証→パスワード認証
ubutnu1サーバー:SSHクライアント (192.168.179.9)
ubutnu2サーバー:SSHサーバー (192.168.179.10)
一度もSSH接続していないので、/etc/known_hostsファイル、 ~/.ssh/authorized_keys ファイルが作られていない
実践:鍵交換
実践:ホスト認証→公開鍵認証
感想
とりあえず調べて、やってみて、あやふやだった部分が解決した。
それはいいんだけど、記事書くの意外としんどかったな(笑)
記事用に環境構築したり、画面キャプチャしたり。Quitaとかめちゃくちゃ更新している人すごいわ。
記載内容に誤りとか、何かアドバイスがあればご教示ください!
リンク
OpenSSH公式https://www.openssh.com/
ja.wikipedia.org ja.wikipedia.org www.unixuser.org
RFC(Requets for Comment)
RFC 4250 - The Secure Shell (SSH) Protocol Assigned Numbers
RFC 4251 - The Secure Shell (SSH) Protocol Architecture
RFC 4252 - The Secure Shell (SSH) Authentication Protocol
RFC 4253 - The Secure Shell (SSH) Transport Layer Protocol
RFC 4254 - The Secure Shell (SSH) Connection Protocol
RFC 4255 - Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
RFC 4256 - Generic Message Exchange Authentication for the Secure Shell Protocol (SSH)
※英語でこんなにいっぱい読めない!(時間と体力的に)