バージニア州Bedford郡でThomas Jefferson Bealeという男性により1820年に埋められた金銀財宝の在りかを示すとされる3組の暗号は、1885年に小冊子として発行されました。埋められた財宝は現在の貨幣価値で6500万ドル(約53億円)と言われ、「宝探しマニア」の心をときめかせ続けています。
⇧ 胡散臭さが半端ないんですけど~。
暗号は、安全に通信するにも重要よね、ってことで、SSHについて調べてみました。レッツトライ~。
SSH接続とは?
まぁ、何て言うか「Tera Term」の説明が語弊を招くような感じなんですよ。
SSH には SSH1、SSH2 の2種類のプロトコルがあります。SSH2 は SSH1 の上位互換ではないので注意が必要です。接続するホストに応じて適切に選択する必要があります。TTSSH は両方のバージョンに対応しています。
また、SSH の接続方法には
- パスワード認証
- 公開鍵(と秘密鍵のペアによる)認証
- 認証エージェント Pageant を利用する
- SSH1 における rhosts 認証
- SSH1 における challenge/response(TIS) 認証
- SHS2 における keyboard-interactive 認証
があります。
⇧ 「認証方法」と「接続方法」をごっちゃにしてるんだと。
SSH(Secure Shell)とは?
そもそもとして、「SSH(Secure Shell)」って何だっけ?
Secure Shell(セキュアシェル、SSH)は、暗号や認証の技術を利用して、安全にリモートコンピュータと通信するためのプロトコル。パスワードなどの認証部分を含むすべてのネットワーク上の通信が暗号化される。
⇧ 暗号や認証を利用して、異なるマシン間で通信するためのプロトコルなんだと。
で、「SSHプロトコル」の仕様が制定されたのが、2006年ってことで、2020年の現在からすると、歴史は15年に満たないぐらい。
2006年にSSHのプロトコルおよびその関連技術がRFCとして制定された。
ただ、2008年の時点でもっとも一般に普及しているのは、オープンソースで開発されているOpenSSHで、Linuxなどでも標準的に利用されているため、現在では単にSSHと言った場合、OpenSSHの実装系を指すことが多い。
⇧「SSHプロトコル」の実装としては、「OpenSSH」がメジャーなんですね。
当然ながら、「SSH(Secure Shell)」ってのは、
「ssh」は、暗号化された通信を使ってリモート接続をするコマンドです。リモートマシンにログインして、リモートマシン上でコマンドを実行したい場合に使用します。
【 ssh 】コマンド――リモートマシンにログインしてコマンドを実行する:Linux基本コマンドTips(80) - @IT
なお、接続先のコンピュータでは、「sshd(SSH daemon:SSHのサーバプログラム)」が動作している必要があります。また、インターネット経由で接続する場合には、ルーターなどで外部から接続できるように設定しておく必要もあります。sshコマンドを試してみたい場合には、ローカルネットワーク内のコンピュータや仮想化環境を使用しましょう。
【 ssh 】コマンド――リモートマシンにログインしてコマンドを実行する:Linux基本コマンドTips(80) - @IT
⇧ ってな感じで、「クライアントサーバモデル」っちゅうことになりますかね。
イメージ図で言うと、
⇧「Client」側のマシンには「ssh」、「Server」側のマシンには「sshd」がそれぞれインストールされてる必要があるんですかね。
SSH接続はどこまでを言う?
「Tera Term」のページの説明によると、
SSH2接続を行うことで、通信経路を暗号化することができるのが特徴ですが、パケットの暗号化を行うためには、「鍵」が必要です。通信経路の暗号化には、共通鍵による共通鍵暗号が利用されます。公開鍵暗号のほうがセキュリティ強度は高いのですが、暗号処理に多大な時間がかかるため、SSHのような通信性能が要求されるしくみでは採用されません。SSH2では、共通鍵暗号アルゴリズムとして、AES(Advanced Encryption Standard:Rijndaelアルゴリズム)や3DES(Triple DES)などが利用されます。
https://ttssh2.osdn.jp/manual/4/ja/reference/sourcecode.html
⇧ 「鍵」が使用されていないと「SSH接続」したとはいえ無さそうなんだけど、
共通鍵は通信を行う二者間でのみに共有される情報であり、第三者に知られてはなりません。SSH2では、クライアントがリモートホスト(SSHサーバ)へTCP接続した時に、"Diffie-Hellman"アルゴリズムをベースとした独自の方式により、クライアントとサーバでしか知り得ないDH(Diffie-Hellman)鍵を生成します。DH鍵生成までの過程は、ネットワーク上をパケットが平文で流れるため、第三者によるパケットキャプチャが可能となっていますが、パケットを覗かれても、DH鍵は理論上第三者には分からないようになっています。
https://ttssh2.osdn.jp/manual/4/ja/reference/sourcecode.html
⇧「TCP接続」が実施された際に「DH(Deffie-Hellman)鍵」ができるんだそうな。
で、むっちゃ紛らわしいんだけど、
共通鍵が生成できたあとは、その鍵を使ってパケットを暗号化します。SSH2では、送受信されるパケットは種類があるため、それぞれに「メッセージ番号」を割り振っています。RFC4250にメッセージ番号の一覧があります。
https://ttssh2.osdn.jp/manual/4/ja/reference/sourcecode.html
⇧ ここでいう「共通鍵(公開鍵)」は、「DH(Diffie-Hellman)鍵」ってことなるんだと思うんだけど、「SSHログイン」で「認証」する際の「公開鍵(と秘密鍵のペアによる)認証」の「公開鍵」とは全く関係ないというね、たぶん。
で、上記までの説明と、「Tera Term」のページの「SSH2ログインシーケンス」を見た感じ、
⇧ 「ユーザ認証開始」前までの部分が「SSH接続」に該当するんではなかろうかと。
なので、「SSHログイン」ってのは、大きく分けて、
- SSH接続
- ユーザ認証
の2つの工程に分かれるんじゃないかと。
「RFC 4254」の説明によると、
SSH接続プロトコルは、SSHトランスポート層およびユーザー認証プロトコル([SSH-TRANS]および[SSH-USERAUTH])の上で実行するように設計されています。対話型ログインセッション、コマンドのリモート実行、転送されたTCP / IP接続、および転送されたX11接続を提供します。
⇧ 「SSH接続プロトコル」ってのが、いろいろ提供してるので、「何をもってSSH接続がなされたか?」って部分で認識齟齬が出てきそうね...
実際にSSH接続確認してみる
まぁ、結局のところ、どこまでのことをしたら「SSH接続」したことになるのかが曖昧な感じなんだけど、 「sshd」が起動してるサーバに対して、「SSH接続」してみた。
2020年11月28日(土)追記:↓ ここから
クライアントがWindows10であれば、デフォルトで「ssh」は使えるかと。
2017年10月17日に行われたWindows10 Fall Creators Updateにより、Windows10で公式にSSHがサポートされるようになり、SSHクライアントが標準で利用できるようになっている。
⇧「Windowsアップデート」ができていれば、特に「ssh」のインストールとか不要みたいね。
「Windows」 では、「Windows 10 」になり2017年10月17日になってようやく「ssh」が標準搭載されたようですが、「OS X(Mac)」はどうか?
⇧ ってことで、「MacOS-9」以降であれば、「ssh」が標準搭載されていそう。
正式名称は「Mac OS」みたいね。
Mac OSは、アップルが開発・販売する、Macintoshのオペレーティングシステムである。
⇧ で、2020年11月28日(土)現在までで「Mac OS」を振り返ると、大きく分けて、
ってな感じで、2001年には、「ssh」が標準搭載されてたってことですかね。
「Windows」は「Mac OS」に遅れること、16年後に「ssh」の標準搭載に至ると...
諸行無常...
2020年11月28日(土)追記:↑ ここまで
「SSH接続の確認」を実施。
ssh -p [sshdが起動してるサーバのSSH接続用のポート] [sshdが起動してるサーバのIPアドレス]
ってな感じで、「SSH接続」のための「共通鍵(公開鍵)」 を作成するかって確認メッセージが表示されれば、「SSH接続の確認」ができたと言えるってことらしい。
と言うわけで、「接続先」のサーバで「sshd」が起動済みである前提とはなりますが、「接続先」の「IPアドレス」「ポート」さえ分かれば「SSH接続の確認」は済んだと言えるそうな。
なので、「ユーザ認証」することなく「SSH接続の確認」は行うことができるってことですね、「Tera Term」の「SSHの接続方法」の説明に惑わされがちになるのに気を付けましょうってことですかね。
本日もモヤモヤ感が満載で、ザワザワしちゃってますが...
今回はこのへんで。