【入門】ssh コマンドとは?接続方法やオプションの使い方

sshssh とは、コンピュータを遠隔操作するコマンドです。
スポンサーリンク

ssh コマンドの使い方

ここで紹介するコマンドの赤文字は、ご自身の設定に置き換えてください。

秘密鍵を持ってない場合は、こちらから作成してください

秘密鍵で認証してログイン -i

ssh -i ~/.ssh/id_rsa username@198.51.100.1
The authenticity of host '198.51.100.1 (198.51.100.1)' can't be established.
ECDSA key fingerprint is SHA256:123456789abcdefgh.
Are you sure you want to continue connecting (yes/no)?

yes と入力し、Enter を押すとログインできます。

秘密鍵を登録 ssh-add

ローカルホストに秘密鍵を登録すると、ssh コマンドのオプション -i を省略できます。

ssh-add ~/.ssh/id_rsa
ssh username@198.51.100.1

秘密鍵・公開鍵を生成 ssh-keygen

ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/username/.ssh/id_rsa):鍵を保存するパス
Enter passphrase (empty for no passphrase): パスワード
Enter same passphrase again: パスワード
何も入力せずに Enter を押すとデフォルト値となります。(パスワードは無しとなります)

公開鍵の登録 ssh-copy-id

リモートホストに公開鍵を登録すると、ペアの秘密鍵を ssh の認証で使えるようになります。

ssh-copy-id -i ~/.ssh/id_rsa.pub username@198.51.100.1

※Permission denied が発生した場合

以下のいずれかの方法で認証用の秘密鍵を指定してください

  • ssh-copy-id コマンドのオプション「-o IdentityFile=秘密鍵のパス
  • ssh-add コマンド
ssh -i ~/.ssh/id_rsa username@198.51.100.1

ちなみに、リモートホストに登録した公開鍵は ~/.ssh/authorized_keys に記録されます。

ポートフォワーディング

ポートフォワーディングポートフォワーディングとは、「アドレス:ポート」宛の通信を、別の「アドレス:ポート」宛に転送する技術です。

ポートフォワーディングには以下の3種類が存在します。

  • ローカルポートフォワーディング
  • リモートポートフォワーディング (ほぼ使わないので割愛)
  • ダイナミックポートフォワーディング

ローカルポートフォワーディング -L

ローカルポートフォワーディングとは、ローカルホストのポートに接続すると、接続リクエストをリモートホストに転送してから、ターゲットホストに接続します。

[ターゲットホスト] は [リモートホスト自身] を指定可能です。

ssh -NL 8080:localhost:80 198.51.100.1
curl localhost:8080 -v
> Host: localhost:8080
Welcome to nginx!
※リモートホストのポート 80 で nginx がリッスンしている場合

ターゲット localhost:80 にリクエストをそのまま転送するので、Host ヘッダは localhost:8080

ターゲットホストとリモートホストが異なる場合

ssh -NL 8080:ifconfig.me:80 198.51.100.1

※ifconfig.me は接続元の IP アドレスを確認するサイトです。

curl localhost:8080 -H 'Host: ifconfig.me'
198.51.100.1

リモートホストを経由してリクエストを送信するので、リモートホストの IP アドレスが表示されます

ダイナミックポートフォワーディング -D

ダイナミックポートフォワーディングとは、特定のポートに接続すると、接続リクエストをリモートホストに転送してから、ターゲットに接続します。
ssh は SOCKS プロキシとして働きます

[ローカルポートフォワーディング] と [ダイナミックポートフォワーディング] はどちらもリモートホスト経由でターゲットに接続する機能ですが、違いは以下のとおりです。

ローカルポートフォワーディングダイナミックポートフォワーディング
ターゲット特定のポート、ホスト全てのポート、ホスト
リクエスト先
(Host ヘッダ)
ローカルホストターゲットホスト
ssh -ND 8157 198.51.100.1
curl -x socks://0:8157 https://ifconfig.me
198.51.100.1
スポンサーリンク

ssh config (設定ファイル) の書き方

ここでは、設定ファイル (~/.ssh/config) の書き方を説明します。

ServerAliveInterval

ssh が sshd に定期的に応答確認を行うことで、勝手に ssh が切断されるのを防ぎます。

ServerAliveInterval 60

上記では 60 秒ごとに応答確認を行います。

User

ssh コマンドでデフォルトで利用するユーザーを設定します。

User ec2-user

HostName

ssh コマンドでデフォルトで利用するホスト名(IP アドレス)を指定できます。

HostName 192.0.2.1

Host

ssh コマンドで指定する設定のエイリアス名を設定できます。

Host test
HostName 192.0.2.1
User ec2-user

これにより以下の2つは同じ意味を持ちます。

ssh ec2-user@192.0.2.1
ssh test

ProxyCommand -W オプション

踏み台サーバーを経由して別のサーバーにアクセス

Host private          
HostName 192.0.2.250
ProxyCommand ssh 192.0.2.1 -W %h:%p

192.0.2.1 を踏み台に、192.0.2.250 へアクセス。 %h はホスト名、%p はポートを表す。

Include

他の設定ファイルの内容を取り込みます。設定ファイルを分けたい場合に使います。

Include conf.d/*

上記は conf.d/* 配下の設定ファイルを全て取り込みます。

AddKeysToAgent, UseKeychain

Mac OS 専用。秘密鍵の指定やパスフレーズをキャッシュし、入力をスキップできます。

AddKeysToAgent yes
UseKeychain yes