はじめに
「サーバーに接続するならSSHを使って」と言われたものの、具体的に何をしているのか、なぜSSHなのか、実はよく分かっていない...という方も多いのではないでしょうか。
エンジニアとして働く上で、Linuxサーバー等の操作は避けて通れません。その際、必ずと言っていいほどお世話になるのが SSH です。
この記事では、SSHの仕組みから安全と言われる理由、そして現場で役立つ基本的な使い方までを、図解を交えて分かりやすく解説します。これを読めば、黒い画面(ターミナル)への接続も怖くありません!
SSH(Secure Shell)とは?
SSH(Secure Shell)とは、ネットワークを経由して、離れた場所にあるコンピューター(サーバー)を遠隔操作するための通信プロトコル(決まりごと) です。
手元のパソコンからクラウド上のサーバーなどを操作する際、あたかもそのサーバーの前に座って操作しているかのようにコマンドを実行できます。
かつての主役「Telnet」との違い
SSHが登場する前は、「Telnet」というプロトコルがよく使われていました。しかし、Telnetには致命的な弱点がありました。それは 通信内容が暗号化されない という点です。
パスワードも操作内容も「平文(そのままの文字)」でネットワーク上を流れるため、もし悪意のある第三者が通信を盗聴していた場合、すべての情報が筒抜けになってしまいます。
対してSSHは、通信経路そのものを 強力に暗号化 します。これにより、以下のリスクを防ぐことができます。
- 盗聴: 通信内容を盗み見られること
- 改ざん: 通信内容を書き換えられること
- なりすまし: 正当なユーザーのふりをされること
現在では、インターネット経由のリモート接続において、Telnetを使うことはまずありません。「リモート接続=SSH」 と覚えておいても過言ではないでしょう。
なぜ安全なのか?SSHの仕組みを図解
SSHが安全なのは、「公開鍵暗号方式」という仕組みをうまく利用しているからです。
接続確立の流れをざっくり図解してみましょう。
「公開鍵」と「秘密鍵」のペア
SSHの認証(特に公開鍵認証)では、2つの鍵がペアとして働きます。
- 公開鍵(Public Key): 誰に見せても良い鍵。サーバー側に置いておく(南京錠のようなイメージ)。
- 秘密鍵(Private Key): 自分だけが持っている鍵。クライアントPC内に保管し、誰にも渡してはいけない(南京錠を開ける鍵のイメージ)。
「公開鍵(南京錠)」でロックされたデータは、ペアとなる「秘密鍵」でしか開けることができません。これにより、「秘密鍵を持っている=本人である」という証明が可能になります。
パスワード認証と公開鍵認証
SSHには主に2つの認証方式があります。
- パスワード認証: 従来のIDとパスワードによる認証。設定は簡単ですが、パスワードが漏洩すると不正侵入されるリスクがあります。
- 公開鍵認証: 上記の鍵ペアを使う方式。秘密鍵という「ファイル」を持っていないとログインできないため、パスワード認証よりもセキュリティ強度が高く、推奨されています。
さっそく使ってみよう(実践編)
それでは、実際にSSHコマンドを使ってみましょう。MacのターミナルやWindowsのPowerShellなどで標準的に利用できます。
基本的な接続コマンド
最も基本的な使い方は以下の通りです。
ssh ユーザー名@ホスト名(またはIPアドレス)
例えば、IPアドレスが 192.0.2.1 のサーバーに、ユーザー admin でログインする場合は以下のようになります。
ssh admin@192.0.2.1
初めて接続するサーバーの場合、以下のようなメッセージが表示されることがあります。
The authenticity of host '192.0.2.1' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
これは「このサーバーに初めて繋ぐけど、本当に正しい相手ですか?」という確認です。yes と入力してEnterを押すと接続処理が進みます。
よく使うオプション
実務では、標準以外の設定で接続することも多々あります。覚えておくと便利なオプションをいくつか紹介します。
-
ポート番号を指定する(-p)
セキュリティ対策として、SSHの待受ポートを標準の22番から変更している場合があります。その場合は-pで指定します。ssh -p 10022 admin@192.0.2.1 -
秘密鍵ファイルを指定する(-i)
AWSなどのクラウドサーバーに接続する場合、特定の秘密鍵ファイル(.pemや.id_rsaなど)を指定する必要があります。ssh -i ~/.ssh/my-key-pair.pem ec2-user@198.51.100.1
一歩進んだ活用術
毎回長いコマンドを打つのは大変ですね。少しの設定でSSHライフが劇的に快適になります。
~/.ssh/config で接続を楽にする
ホームディレクトリの .ssh フォルダにある config というファイル(なければ作成)に設定を書いておくと、エイリアス(別名)で接続できるようになります。
Host my-server
HostName 192.0.2.1
User admin
Port 10022
IdentityFile ~/.ssh/id_rsa
このように記述しておけば、以降は以下のコマンドだけで接続可能です!
ssh my-server
ファイル転送もSSHで
SSHの仕組みを利用してファイルを転送するコマンドに scp があります。
# ローカルのファイルをサーバーへ転送
scp local-file.txt admin@192.0.2.1:/home/admin/
# サーバーのファイルをローカルへダウンロード
scp admin@192.0.2.1:/home/admin/remote-file.txt ./
グラフィカルに操作したい場合は、FileZillaなどのFTPソフトでも、プロトコルに「SFTP(SSH File Transfer Protocol)」を選択することで、SSHと同じ認証情報で安全にファイル転送が可能です。
まとめ
SSHは、サーバーサイドの開発やインフラ構築において、まさに「入り口」となる重要な技術です。
- SSHは暗号化通信で安全にリモート操作する仕組み
- 通信の盗聴や改ざんを防ぐ
- 公開鍵認証を使うことでよりセキュリティを高められる
- configファイルを使うと日々の業務が快適になる
最初はコマンド操作に戸惑うかもしれませんが、慣れてしまえば手足のようにサーバーを操れるようになります。セキュリティを意識しつつ、ぜひSSHを使いこなしてください!
注釈
※ 本記事で紹介したコマンドや設定は一般的な環境を想定しています。組織のポリシーや環境によっては異なる手順が必要な場合がありますのでご注意ください。