メインコンテンツまでスキップ

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

· 約7分
Shinya Kato
DayoneLabs管理人、ソフトウェア開発者、OSS開発者

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接続の設定を記述しておくと、短い別名で接続できるようになります。

設定例

~/.ssh/config
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
-oSSH設定オプションを指定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)は、接続前に必ず確認する必要がある重要なステップです。


参考リンク:

免責事項:
当記事は管理人の開発時に書き留められたメモをもとにAIを活用して編纂されたものです。 管理人は記事の公開前に内容の校正・校閲を行い、記事の信頼性と正確性の向上に務めますが、それらを保証するものではありません。 また、当記事の編集時の誤字やコード例の不具合等によって読者が何らかの損害等を被った場合でも、管理人は一切の責任を負いません。 当記事に掲載したコンテンツの利用については自己責任でお願い致します。