SSHコマンドでリモート端末にアクセスする方法 - 基本操作と認証設定

どうも、Shinyaです。この記事では、SSHコマンドを使用してリモート端末にアクセスする方法について解説します。基本的な接続コマンドから、秘密鍵による認証、ポート指定、DNS別名の活用まで、実務で必要となるSSHの操作を扱います。
- SSHでリモートサーバーに接続する方法を知りたい人
- 秘密鍵を使ったSSH認証の設定方法を知りたい人
- Amazon Lightsailなどのクラウドインスタンスに接続したい人
- SSHコマンドのオプションを整理して理解したい人
SSHとは
SSH(Secure Shell)は、ネットワーク経由でリモート端末に安全に接続するためのプロトコルです。通信内容が暗号化されるため、パスワードやコマンドの内容が第三者に傍受されるリスクを低減できます。
リモート端末への接続方法としてはリモートデスクトップのようなGUIベースの方法もありますが、SSHはCLI(コマンドラインインターフェース)を通じて操作を行います。GUIベースの接続と比較すると、SSHには以下のような特徴があります。
| 項目 | SSH(CLI) | リモートデスクトップ(GUI) |
|---|---|---|
| 通信量 | テキストベースのため少ない | 画面情報を転送するため多い |
| 動作速度 | 軽量で高速 | ネットワーク環境に依存しやすい |
| 操作方法 | コマンドライン操作 | マウスとキーボードによるGUI操作 |
| 用途 | サーバー管理、ファイル転送、開発作業 | デスクトップ環境が必要な作業 |
サーバーの管理や開発作業においては、SSHによるCLI接続が一般的に使用されています。
基本的なSSH接続
接続コマンド
SSHコマンドはmacOSおよびLinuxに標準でインストールされています。基本的な接続コマンドは以下の形式です。
ssh ユーザー名@ホスト名
ユーザー名にはリモート端末のログインユーザー名、ホスト名にはIPアドレスまたはドメイン名を指定します。
ssh ubuntu@192.168.1.100
初回接続時には、接続先ホストの信頼性を確認するメッセージが表示されます。接続先が正しいことを確認した上でyesを入力すると、接続先の情報が~/.ssh/known_hostsに記録され、次回以降は確認メッセージが表示されなくなります。
秘密鍵による認証
秘密鍵認証とは
SSHでは、パスワード認証に加えて秘密鍵(公開鍵認証)を使用した認証方式を利用できます。秘密鍵認証では、クライアント側に秘密鍵ファイル、サーバー側に対応する公開鍵を配置することで認証を行います。パスワード認証と比較して、セキュリティの面で優れた認証方式です。
Amazon LightsailなどのクラウドサービスでSSH接続を行う場合、インスタンス作成時にダウンロードした秘密鍵ファイルを使用して接続します。
秘密鍵のパーミッション設定
秘密鍵ファイルを使用する前に、ファイルのパーミッションを適切に設定する必要があります。SSHは秘密鍵ファイルのパーミッションが緩い場合、セキュリティ上の理由から接続を拒否します。
chmod 400 ~/.ssh/my-key.pem
chmod 400は、ファイルの所有者のみに読み取り権限を付与し、それ以外のユーザーからのアクセスを禁止する設定です。この設定を行わないと、以下のようなエラーメッセージが表示されて接続に失敗します。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for 'my-key.pem' are too open.
-iオプションで秘密鍵を指定する
秘密鍵ファイルを使用して接続する場合は、-iオプションで秘密鍵のパスを指定します。
ssh -i ~/.ssh/my-key.pem ubuntu@192.168.1.100
Amazon Lightsailへの接続例
Amazon Lightsailのインスタンスに接続する場合の例を示します。Lightsailではインスタンス作成時にSSHキーペアが生成され、秘密鍵ファイル(.pem形式)をダウンロードできます。
# 秘密鍵のパーミッションを設定
chmod 400 ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem
# Lightsailインスタンスに接続
ssh -i ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem ubuntu@xxx.xxx.xxx.xxx
接続に成功すると、リモート端末のシェルが表示され、コマンドを実行できる状態になります。
リモート端末側でもパーミッションの管理は重要です。~/.sshディレクトリは700、~/.ssh/authorized_keysファイルは600に設定されていることを確認します。これらのパーミッションが適切でない場合、公開鍵認証が正常に動作しないことがあります。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
ポートの指定
-pオプション
SSHのデフォルトポートは22番ですが、セキュリティ上の理由からポート番号を変更しているサーバーもあります。その場合は-pオプションでポート番号を指定します。
ssh -p 2222 ubuntu@192.168.1.100
秘密鍵の指定と組み合わせることもできます。
ssh -i ~/.ssh/my-key.pem -p 2222 ubuntu@192.168.1.100
DNS別名(SSH Config)の活用
SSH Configとは
接続先が増えると、毎回ホスト名やオプションを入力するのは手間がかかります。~/.ssh/configファイルにSSH接続の設定を記述しておくと、短い別名で接続できるようになります。
設定例
Host my-server
HostName 192.168.1.100
User ubuntu
IdentityFile ~/.ssh/my-key.pem
Port 22
Host lightsail-tokyo
HostName xxx.xxx.xxx.xxx
User ubuntu
IdentityFile ~/.ssh/LightsailDefaultKey-ap-northeast-1.pem
Port 22
この設定を記述すると、以下のように短い別名で接続できます。
ssh my-server
ssh lightsail-tokyo
オプションをすべて手動で指定する必要がなくなり、接続の管理が容易になります。
SSHコマンドの主要オプション
SSHコマンドで使用頻度の高いオプションを以下にまとめます。
| オプション | 説明 | 使用例 |
|---|---|---|
-i | 秘密鍵ファイルのパスを指定 | ssh -i ~/.ssh/key.pem user@host |
-p | 接続先のポート番号を指定 | ssh -p 2222 user@host |
-l | ログインユーザー名を指定 | ssh -l ubuntu 192.168.1.100 |
-v | デバッグ情報を表示(トラブルシュート用) | ssh -v user@host |
-o | SSH設定オプションを指定 | ssh -o StrictHostKeyChecking=no user@host |
-N | リモートコマンドを実行せずに接続(ポートフォワーディング用) | ssh -N -L 8080:localhost:80 user@host |
-vオプションの活用接続に問題が発生した場合、-vオプションを付けて実行すると、認証プロセスの詳細なログが出力されます。-vvや-vvvのようにvを増やすことで、より詳細な情報を得ることもできます。
まとめ
この記事では、SSHコマンドを使用してリモート端末にアクセスする方法について解説しました。
SSHはリモートサーバーへの安全な接続手段であり、ssh user@hostによる基本接続、-iオプションによる秘密鍵認証、-pオプションによるポート指定が基本的な操作です。~/.ssh/configファイルを活用すると、接続先の管理が容易になります。秘密鍵ファイルのパーミッション設定(chmod 400)は、接続前に必ず確認する必要がある重要なステップです。
参考リンク:
