はじめに

こんにちは!今回はsshコマンドについて解説します。

sshはリモートホストに安全に接続するコマンドです。サーバー管理、リモートワーク、開発環境へのアクセスなど、IT業務ではめっちゃ重要なコマンド。

「遠くのコンピュータに安全につながる魔法」くらいの感じですね。これなしでは現代のIT業務は成り立ちません。

sshコマンドとは

sshは"Secure Shell"の略で、リモートマシンに暗号化された接続を確立する外部コマンドです。

昔のtelnetと違い、通信内容が暗号化されるので、パスワードやデータが盗聴される心配がありません。サーバーへのログイン、ファイル転送、トンネリングなど、様々な用途で活躍します。

基本構文

1
ssh [オプション] [ユーザー名@]ホスト名 [コマンド]

ユーザー名を省略した場合は、現在のシステムのユーザー名が使用されます。

主なオプション

オプション 説明
-u ユーザー名を指定
-p ポート番号を指定(デフォルトは22)
-i 秘密鍵ファイルを指定
-v 詳細表示(ログイン時のトラブル対応で便利)
-N コマンド実行なし(ポートフォワーディング用)
-L ローカルポートフォワーディング
-R リモートポートフォワーディング
-X X11フォワーディング(GUIアプリを遠隔実行)
-C 圧縮を有効にする
-A SSH認証エージェント転送
-o オプション設定(例:-o StrictHostKeyChecking=no

使用例

例1: 基本的なリモート接続

実行結果:

1
2
3
4
The authenticity of host 'example.com (192.168.1.10)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
[email protected]'s password:

example.comというホストにuserユーザーでログインします。初回接続時はホストキーを確認するメッセージが表示されます。

例2: ユーザー名とホスト名を分けて指定

1
ssh -u user example.com

実行結果:

1
[email protected]'s password:

-uオプションでユーザー名を指定。[email protected]と同じ意味です。

例3: 秘密鍵を使用してログイン

1
ssh -i ~/.ssh/id_rsa [email protected]

実行結果:

1
2
(パスワードなしでログイン完了)
[email protected]:~$

秘密鍵ベースの認証を使う場合。公開鍵認証が設定されていれば、パスワードなしでログインできます。

例4: ポート番号を指定

1
ssh -p 2222 [email protected]

実行結果:

1
[email protected]'s password:

SSHがデフォルトの22番ポートではなく、2222番ポートで動作している場合に使用します。

例5: リモートコマンドを実行

1
ssh [email protected] "ls -la /home/user"

実行結果:

1
2
3
4
total 120
drwxr-xr-x  10 user user  4096 Jan  3 12:00 .
drwxr-xr-x   3 root root  4096 Dec 15 10:00 ..
-rw-r--r--   1 user user   220 Nov 24 08:00 .bash_logout

リモートホスト上でコマンドを実行。その後、接続は自動で切断されます。

例6: 詳細ログを表示してトラブル対応

実行結果:

1
2
3
4
OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f  31 Mar 2020
debug1: Reading configuration data /home/user/.ssh/config
debug1: Connecting to example.com [192.168.1.10] port 22.
debug1: Connection established.

-vオプションで接続プロセスの詳細が表示されます。ログイン失敗の原因を調べるのに便利。

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

1
ssh -L 3306:localhost:3306 [email protected] -N

実行結果:

1
(プロンプトが返ってこない状態になる)

リモートホストのローカルホスト:3306ポートを、ローカルマシンの3306ポートにフォワーディング。リモートのDBに安全にアクセスする時に便利です。

例8: リモートホストでコマンドを実行して結果を取得

1
ssh [email protected] "cat /var/log/messages | grep error"

実行結果:

1
2
2026-01-03 10:15:22 [ERROR] Connection timeout
2026-01-03 10:20:45 [ERROR] Failed to connect

リモートホスト上で複数のコマンドを実行して、その結果をローカルで表示。スクリプト内で使用することが多いです。

例9: 圧縮転送を有効にして遅い接続で通信量削減

実行結果:

1
[email protected]'s password:

-Cオプションで通信を圧縮。遅いネットワーク接続での使用に向いています。

例10: Xフォワーディングで遠隔GUIアプリを実行

実行結果:

リモートホスト上のGUIアプリケーションをローカルマシンに表示。GUIツールを遠隔で使う際に便利です。

Tips・注意点

秘密鍵のパーミッション設定

秘密鍵は所有者のみが読み取れるように設定する必要があります。

1
chmod 600 ~/.ssh/id_rsa

パーミッションが間違っていると、Permissions 0644 for 'id_rsa' are too openというエラーが出てログインできません。

SSH設定ファイルで接続設定を管理

~/.ssh/configで接続設定を保存すると、毎回オプションを指定する必要がなくなります。

1
2
3
4
5
Host myserver
    HostName example.com
    User user
    IdentityFile ~/.ssh/id_rsa
    Port 22

設定後は、ssh myserverだけで接続できます。

パスフレーズなしの秘密鍵は危険

秘密鍵盗難時の被害を減らすため、パスフレーズを設定することを強く推奨します。

1
ssh-keygen -p -f ~/.ssh/id_rsa

SSHエージェントを使って秘密鍵のパスフレーズを保管

1
ssh-add ~/.ssh/id_rsa

エージェント起動後は、パスフレーズを1回入力すればセッション中は再入力不要になります。

初回接続時のホストキー確認

初回接続時に表示されるフィンガープリントは、接続先を検証するために重要です。信頼できる管理者に確認してからyesと答えてください。

実践的な使い方

例1: リモートサーバーのバックアップ

1
ssh [email protected] "tar -czf - /important/data" > backup.tar.gz

リモートホストのデータを圧縮してローカルに保存。定期的に実行するスクリプトに組み込めます。

例2: 複数サーバーへの一括実行

1
2
3
for server in server1 server2 server3; do
  ssh user@$server "systemctl status nginx"
done

複数のサーバーに同じコマンドを実行。サーバー管理が効率化できます。

例3: SSHTunnelでリモートDBにアクセス

1
2
ssh -L 3306:db.internal:3306 [email protected] -N &
mysql -h localhost -u dbuser -p

踏み台サーバー経由でリモートDBに接続。社内ネットワークのDBに安全にアクセスできます。

例4: リモートファイル編集

1
nano <(ssh [email protected] cat /etc/nginx/nginx.conf)

リモートファイルをローカルエディタで表示・確認。編集はできませんが、内容確認に便利です。

まとめ

sshコマンドのポイント:

  • リモートホストに暗号化された接続を確立する
  • 基本形: ssh user@hostname
  • 秘密鍵認証: ssh -i ~/.ssh/id_rsa user@hostname
  • ポート指定: ssh -p 2222 user@hostname
  • リモートコマンド実行: ssh user@hostname "command"
  • ポートフォワーディング: ssh -L local:remote -N user@hostname
  • ~/.ssh/configで接続設定を管理すると便利
  • 秘密鍵のパーミッション(600)を忘れずに!

SSH接続はサーバー管理の必須スキル。秘密鍵と公開鍵の関係をしっかり理解して、セキュアな運用を心がけましょう!