😊

結局SSHってなんだっけ

2023/08/25に公開

はじめに

今回はLinuCの勉強をしている際に、改めてSSHの勉強をする機会があったのでついでに記事にしちゃいます。

普段よく使うsshですが、改めて勉強してみると知らないことがたくさんありました。
この記事ではSSHの全体的なお話をします。

前提

sshの具体的なコマンドや設定方法についてはあまり触れていません。

なぜSSHができた?

昔はTelnetやRloginなど、平文のプロトコルが使われていました。
しかし時代は進み、秘密にしないといけない情報がたくさん出てきました。
そんな秘密のやりとり時代に出てきたのが「SSH」です。

どうやって秘密にしてるの?

sshは秘密な情報を扱うプロトコルです。
秘密な情報を扱うには何が必要でしょうか、そう、暗号化です。
sshに使われる暗号化はいくつかあります。

暗号化 説明
RSA 難しい暗号化アルゴリズム
ECDSA 超超難しい暗号化アルゴリズム
ED25519 RSAの強化版

適当に書きましたが、よく使われるのはECDSAかED25519ということです。
詳しく知りたい方は「ssh 暗号化アルゴリズム」で調べてみてください、難しい説明がたくさんヒットすると思います。

普段sshを使っていて意識をすることはないと思いますが、実はちゃんと暗号化されてるよ〜って頭の隅に置いておいてください。

私たちの使ってるSSH

私たちの使っているSSHは恐らく大半がOpenSSHです。
OpenSSHはSSHをするための道具が一通り揃ったOSS(オープンソースソフトウェア)のことです。

例えば、Macや多くのLinuxディストリビューションではデフォルトでOpenSSHがインストールされています。
MacのTerminalからsshを使う場合は、基本的にこのOpenSSHを使用しています。
試しにTerminalでssh -Vとしてみましょう。

$ ssh -V
OpenSSH_9.0p1, LibreSSL 3.3.6

OpenSSHのバージョンが表示されました。

代表的なOpenSSHのコンポーネントを挙げてみます。

主要コンポーネント 機能説明
ssh SSHクライアント。リモートマシンに安全に接続するためのツール
sshd SSHデーモン。リモートマシンからのSSH接続を受け付けるサーバーサイドのプログラム
scp Secure Copy Protocol。リモートマシンとファイルを安全に転送するツール
sftp Secure File Transfer Protocol。安全なファイル転送プロトコル
ssh-keygen SSHキーペア(公開鍵と秘密鍵)を生成するツール

ポートフォワーディング

sshの機能にポートフォワーディング機能というものがあります。
簡単にいうとポートを繋いでくれる機能です。
この機能は2つ種類があります。

  • ローカルポートフォワーディング
  • リモートポートフォワーディング

もう少し具体的に見てみましょう。

ローカルポートフォワーディング

「ローカル」ポートフォワーディングなので、例えば自宅のPCから会社のサーバーに接続するときなんかに使います。
以下は自宅から社内システムにSSHサーバー経由で接続する図です。

この図では自宅のPCでlocalhost:5000に接続すると、会社の社内システム(8080番ポート)に転送(フォワーディング)されています。
前提としてSSHサーバーと社内サーバーが接続できる必要はあります。

リモートポートフォワーディング

「リモート」ポートフォワーディングは、先ほどとは逆にリモートのサーバーから自宅PCのポートに転送する場合に使います。

これは例えば、自宅PC上でwebアプリケーションを公開した際に、外へ公開する時なんかに使います。
自分のPC上のwebアプリケーションにそのままアクセスさせてもいいですが、怖くないですか?
そんな時にリモートポートフォワーディング機能を使ってSSHサーバー経由でアクセスするようにします。

SSHサーバーを経由させることで、自宅PCの公開するポートを限定したり、セキュリティ的な面で恩恵が受けられます。

認証方法

sshには2種類の認証方法があります。

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

パスワード認証

これは、馴染み深いかと思います。
皆さんが普段使っているユーザー名とパスワードでの認証ですね。

しかし、これは推奨されていません。
パスワードは使い回しや、簡単なパスワードを設定しているなど、セキュリティが不十分だったりします。

ちなみに、デフォルトではパスワード認証になっています。

リモートサーバーに接続した後、
/etc/ssh/sshd_configPasswordAuthenticationをyesからnoに変更しましょう。
これでパスワード認証をオフにできます。

公開鍵認証

こちらは「秘密鍵」と「公開鍵」という2つの鍵を使って認証を行う方式です。
sshではこちらが推奨とされています。

公開鍵登録の流れ

まずはローカルで鍵を生成します。
鍵の生成にはssh-keygenコマンドを使用します。

これで2つの鍵が生成されました。
鍵は[ファイル名].pub[ファイル名]という二つのファイルが生成されます。

次に、公開鍵のみをssh接続するリモートサーバーに渡します。

これでリモートサーバーに公開鍵が渡されました。
この鍵を使ってsshのやり取りを行います。

まとめ

自分でSSHサーバーを立てることはまずないので、SSHサーバーがどのように使われているかを知るいい機会になりました。
今回は鍵を使ったデータ交換までは触れませんでした、詳しく知りたい方は参考資料のサイトをオススメします。
鍵交換におけるなんか腑に落ちない、という部分を詳しく解説して下さってます。

参考資料

https://qiita.com/angel_p_57/items/2e3f3f8661de32a0d432

GitHubで編集を提案

Discussion