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

コマンドリファレンス

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
-XX11 フォワーディングを有効にするssh -X user@host
-o OPTIONssh_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 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-keygen
    SSH鍵ペア(秘密鍵・公開鍵)を生成するコマンド。ssh-keygen -t ed25519 で Ed25519 鍵を生成できる。
  • ssh-agent / ssh-add
    秘密鍵をメモリに保持してパスフレーズの繰り返し入力を省略するエージェント。

参考

Bash玄

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

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

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

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

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

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

Bash玄をフォローする

コメント