ssh コマンド|ssh接続の基本から主要オプションまで解説

コマンドリファレンス

ssh コマンドとは

ssh(Secure Shell)は、リモートサーバーへ暗号化された通信で安全に接続するLinuxコマンドです。Linuxサーバーの管理・運用において最もよく使うコマンドのひとつで、パスワード認証または公開鍵認証によって ssh接続 を確立します。本記事では、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 ポート を指定します。サーバー側でポート番号を変更する手順や疎通確認の方法は SSH ポートの変更方法|デフォルト22番から変更する手順と接続・確認方法 にまとめています。

例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
-XX11 フォワーディングを有効にするssh -X user@host
-o OPTIONssh_config の設定オプションをコマンドラインで指定ssh -o StrictHostKeyChecking=no user@host

~/.ssh/config で接続設定を管理する

毎回 -p-i を書くのは手間がかかります。~/.ssh/config にHostごとの設定を書いておくと、ssh myserver のような短いエイリアスで接続できるようになります。

# ~/.ssh/config
Host myserver
    HostName example.com
    User admin
    Port 2222
    IdentityFile ~/.ssh/my_key

複数サーバーの使い分け、踏み台サーバー経由の接続(ProxyJump)、設定の優先順位の注意点など詳しい書き方は SSH configの書き方|~/.ssh/configで接続設定をまとめる方法 にまとめています。

SSH接続できないときの確認項目

ssh コマンド で接続できない場合、以下を順番に確認します。

  • ホスト名・IPアドレスが正しいか(ping で疎通確認)
  • ssh ポートが開いているか(nc -zv example.com 22telnet 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 ポートの変更方法
    サーバー側でSSHの待受ポートを22番から変更する手順と、変更後の接続・疎通確認方法。
  • ssh-keygen
    SSH鍵ペア(秘密鍵・公開鍵)を生成するコマンド。ssh-keygen -t ed25519 で Ed25519 鍵を生成できる。
  • ssh-agent / ssh-add
    秘密鍵をメモリに保持してパスフレーズの繰り返し入力を省略するエージェント。

よくある質問

Windowsでもssh コマンドは使えますか?

Windows 10/11には標準でOpenSSHクライアントが搭載されているため、コマンドプロンプトやPowerShellから同じsshコマンドで接続できます。macOS・LinuxのターミナルでもオプションやSSH configの書式は共通です。

1回だけコマンドを実行してすぐログアウトするには?

ssh user@host "コマンド" のようにコマンドを引数で渡すと、リモートでそのコマンドだけ実行してsshセッションを終了します(例6を参照)。定期実行したい場合はcronやスクリプトからこの形式で呼び出すのが一般的です。

よく使うssh コマンドのオプションだけ知りたい

-p(ポート指定)、-i(秘密鍵指定)、-v(詳細ログ)の3つが最も使用頻度が高いオプションです。詳細は上記の「主要オプション一覧」表を参照してください。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント