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

sshssh とは、コンピュータを遠隔操作するコマンドです。
ssh -i ~/.ssh/id_rsa username@192.0.2.1

秘密鍵 (~/.ssh/id_rsa) を利用し、ユーザー (username)ホスト (192.0.2.1) にログインします

本記事では、ssh の結果の見方、オプションの使い方、設定を解説していきます。

ネットワークのコマンド
スポンサーリンク

ssh コマンドの使い方

ssh コマンドは次の2つの認証方法があります。

パスワード認証

ユーザー (username)ホスト (192.0.2.1) にパスワード認証でログイン

ssh username@192.0.2.1

通常は、セキュリティを考慮して、パスワード認証の代わりに公開鍵認証を利用します。

公開鍵認証

以下の手順にて、公開鍵認証でログインします。

  1. ローカルホストに公開鍵・秘密鍵を生成
  2. リモートホストに公開鍵を登録
  3. 秘密鍵で公開鍵認証して、リモートホストにログイン (既に秘密鍵を持ってる場合はここから)
すでに秘密鍵を持ってる場合は③から

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: もう1度パスワード

未入力で Enter を押すと、デフォルトの設定になります。(パスワードは無しとなります)

既に秘密鍵を持っており、公開鍵を生成したい場合

ssh-keygen -yf ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

ssh-copy-id 公開鍵を登録

リモートホストの ~/.ssh/authorized_keys に公開鍵を登録します。

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

Permission denied (publickey,gssapi-keyex,gssapi-with-mic) が発生した場合は、パスワード認証の代わりに公開鍵認証で、公開鍵を登録してください。

パスワード認証の代わりに、登録済みの秘密鍵で公開鍵認証をし、公開鍵を登録する方法

ssh-copy-id -f -o "IdentityFile ~/.ssh/key" -i ~/.ssh/id_rsa.pub username@192.0.2.1

-i 秘密鍵で公開鍵認証

秘密鍵 (~/.ssh/id_rsa) を利用して、ユーザー (username)ホスト (192.0.2.1) にログイン

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

(オプション) ssh-add 秘密鍵を登録

ssh-agent に秘密鍵を登録すると、ssh コマンドのオプション -i を省略できます。

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

ポートフォワーディング

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

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

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

ローカルポートフォワーディングとは、ローカルホストのポートに接続すると、リモートホスト経由で、指定したホストに接続します。
ssh -NL 8080:ifconfig.me:80 username@192.0.2.1
curl localhost:8080 -H 'Host:ifconfig.me'
192.0.2.1

リモートホストから接続しているので、リモートホストIP アドレスが取得できます。
※ifconfig.me は接続元の IP アドレスを取得するサイト

[指定したホスト] で localhost を指定する場合
ssh -NL 8080:localhost:80 username@192.0.2.1
curl localhost:8080

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

ダイナミックポートフォワーディングとは、特定のポートに接続すると、リモートホスト経由して、接続先ホストに接続します。

※ssh クライアント=SOCKS プロキシ、特定のポート = SOCKS のポート

ssh クライアントが SOCKS プロキシとなり、リクエストを転送します
ssh -ND 8157 username@192.0.2.1
curl -x socks://localhost:8157 https://ifconfig.me
192.0.2.1
ローカルポートフォワーディングとダイナミックポートフォワーディングの違い
ローカルポートフォワーディングダイナミックポートフォワーディング
接続先指定したホスト:ポートのみ全てのホスト:ポート
Host ヘッダそのまま送信接続先のホストに書き換える
SOCKS利用しない利用する

複数の接続先がある場合は、ダイナミックポートフォワーディングを利用します。

スポンサーリンク

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

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

User デフォルトのユーザー

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

User username

以下のように、ユーザー名を指定する必要がなくなります。

ssh 192.0.2.1

HostName デフォルトのホスト

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

HostName 192.0.2.1
ssh username

Host エイリアス

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

Host test
HostName 192.0.2.1
User username

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

ssh username@192.0.2.1
ssh test

ProxyCommand 踏み台

踏み台サーバーを経由して別のサーバーにアクセスできます。

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 はポートを表す。

ServerAliveInterval 応答確認

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

ServerAliveInterval 60

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

Include 他の設定を取り込み

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

Include conf.d/*

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

AddKeysToAgent, UseKeychain 鍵の登録

秘密鍵の指定やパスフレーズをキャッシュし、入力をスキップできます。
(UseKeychain は macOS の keychain に鍵を保存)

AddKeysToAgent yes
UseKeychain yes
スポンサーリンク

関連記事

学習ロードマップ
ネットワークのコマンド
OSI 参照モデル