ssh(Secure Shell)は、リモートサーバーへ暗号化された通信で安全に接続するコマンドです。Linuxサーバーの管理・運用において最もよく使うコマンドのひとつで、パスワード認証または公開鍵認証によって ssh接続 を確立します。
構文(Syntax)
ssh [オプション] [ユーザー名@]ホスト名 [コマンド]
- ユーザー名:省略するとローカルのログインユーザー名が使われる
- ホスト名:IPアドレスまたはホスト名・FQDNを指定
- コマンド:省略するとリモートのシェルに入る。指定するとそのコマンドだけ実行して終了
ssh接続の基本例
例1: 最もシンプルなSSH接続
ssh example.com
ローカルのユーザー名でリモートの example.com に接続します。初回接続時は fingerprint の確認が表示されます。
The authenticity of host 'example.com (203.0.113.1)' can't be established.
ED25519 key fingerprint is SHA256:abc123...
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'example.com' (ED25519) to the list of known hosts.
user@example.com's password:
例2: ユーザー名を指定してSSH接続
ssh admin@192.168.1.10
admin というユーザーで IP アドレス 192.168.1.10 のサーバーに接続します。ユーザー名@ホスト名 の形式が基本です。
例3: ポートを指定してSSH接続(-p)
ssh -p 2222 user@example.com
デフォルトのSSHポートは 22 ですが、セキュリティのためにポートを変更しているサーバーに接続する場合は -p で ssh ポート を指定します。
例4: 秘密鍵を指定してSSH接続(-i)
ssh -i ~/.ssh/my_key user@example.com
AWS EC2 など公開鍵認証が必要なサーバーに接続するとき、-i で秘密鍵ファイルのパスを指定します。パーミッションは 600 にしておく必要があります。
# 秘密鍵のパーミッション設定
chmod 600 ~/.ssh/my_key
ssh -i ~/.ssh/my_key ec2-user@54.123.45.67
例5: ポートと秘密鍵を両方指定
ssh -p 2222 -i ~/.ssh/my_key user@example.com
例6: リモートでコマンドを実行して終了
ssh user@example.com "ls -la /var/log"
コマンドを引数に渡すと、そのコマンドを実行して ssh接続を終了します。ログの確認やワンライナーのバッチ処理に便利です。
例7: 詳細ログ付きで接続(-v / -vv / -vvv)
ssh -v user@example.com
接続に失敗する場合のデバッグに使います。-vv や -vvv でさらに詳細なログを出力できます。
主要オプション一覧
| オプション | 説明 | 使用例 |
|---|---|---|
-p PORT | 接続先の ssh ポート を指定(デフォルト: 22) | ssh -p 2222 user@host |
-i FILE | 認証に使う秘密鍵ファイルを指定 | ssh -i ~/.ssh/id_rsa user@host |
-l USER | ログインユーザー名を指定(user@host と同義) | ssh -l admin host |
-v | 詳細ログ出力(デバッグ用)。-vvv で最大詳細 | ssh -vv user@host |
-L PORT:HOST:PORT | ローカルポートフォワーディング | ssh -L 8080:localhost:80 user@host |
-R PORT:HOST:PORT | リモートポートフォワーディング | ssh -R 9090:localhost:3000 user@host |
-N | リモートコマンドを実行しない(ポートフォワード専用) | ssh -N -L 8080:localhost:80 user@host |
-f | バックグラウンドで実行 | ssh -f -N -L 8080:localhost:80 user@host |
-T | 擬似端末(tty)を割り当てない | ssh -T git@github.com |
-C | 通信を圧縮する(低速回線で有効) | ssh -C user@host |
-X | X11 フォワーディングを有効にする | ssh -X user@host |
-o OPTION | ssh_config の設定オプションをコマンドラインで指定 | ssh -o StrictHostKeyChecking=no user@host |
~/.ssh/config で接続設定を管理する
毎回 -p や -i を書くのは手間がかかります。~/.ssh/config に設定を書いておくと、短いエイリアスで接続できます。
# ~/.ssh/config
Host myserver
HostName example.com
User admin
Port 2222
IdentityFile ~/.ssh/my_key
Host bastion
HostName bastion.example.com
User ec2-user
IdentityFile ~/.ssh/aws_key.pem
設定後は以下のように短く接続できます:
ssh myserver
ssh bastion
config ファイルのパーミッションは 600 にしておきましょう。
chmod 600 ~/.ssh/config
SSH接続できないときの確認項目
ssh コマンド で接続できない場合、以下を順番に確認します。
- ホスト名・IPアドレスが正しいか(
pingで疎通確認) - ssh ポートが開いているか(
nc -zv example.com 22やtelnet example.com 22) - ファイアウォールでSSHポートが許可されているか
- 秘密鍵のパーミッションが
600になっているか(chmod 600 ~/.ssh/id_rsa) - known_hosts の不一致(サーバー再構築後によく起こる。該当行を
ssh-keygen -R hostnameで削除) - ユーザー名・パスワードが正しいか
詳しいトラブルシューティング手順は SSH接続できないときのチェックリスト を参照してください。
関連コマンド
scp
SSH経由でファイルをコピーするコマンド。scp ファイル user@host:/path/の形式で使用。ssh-copy-id
公開鍵をリモートサーバーのauthorized_keysに自動登録するコマンド。パスワードなしログインの設定に使う。ssh-keygen
SSH鍵ペア(秘密鍵・公開鍵)を生成するコマンド。ssh-keygen -t ed25519で Ed25519 鍵を生成できる。ssh-agent/ssh-add
秘密鍵をメモリに保持してパスフレーズの繰り返し入力を省略するエージェント。
参考
- manページ
https://man7.org/linux/man-pages/man1/ssh.1.html - OpenSSH 公式ドキュメント
https://www.openssh.com/

コメント