サイトアイコン ITC Media

【完全版】SSHコマンドの基本からその実践方法まで実例付きで解説

(最終更新月:2023年4月)

✔このような方へ向けて書かれた記事となります

「SSHコマンドって何ができるのだろうか?」

「SSHコマンドの書き方・使い方を教えてほしい」

「SSHコマンドの実例が見てみたい」

✔当記事を通じてお伝えすること

当記事では、SSHコマンドについての基本はもちろん、オプションの一覧やその使い方、実例まで丁寧に解説しています。

ぜひ最後までご覧ください。

筆者プロフィール

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

SSHについての基礎知識

まずはSSHについて、どんなものなのかやそのメリットについて見ていきます。

基本的な使い方を知る前に、必ず知っておきたい内容です。

SSHとは?

SSHコマンドは、Secure Shell(SSH)プロトコルを利用して、リモートコンピュータと安全に通信するためのコマンドラインツール。

SSHコマンドを使えば、暗号化された接続経由でリモートシステム(パソコン)にログインし、コマンドの実行やファイルの転送をおこなえます。

SSHは、インターネットやネットワーク上でセキュアな通信を確立するために広く使用されており、サーバー管理やネットワーク機器の設定など、多くの場面で役立ちます。

SSHの歴史

SSHは、1995年にTatu Ylönenによって開発されました。

それまで使われていたTelnetなどのプロトコルは、通信内容が平文で送られていたため、セキュリティ上の問題がありました。

SSHは暗号化された通信を提供することで、これらの問題を解決しました。

SSHの利点

SSHの主な利点は以下の通りです。

Telnetとの違い

サーバー間の通信で使われるTelnetとの違いは以下のとおり。

項目SSHコマンドTELNETコマンド
暗号化通信が暗号化される通信が暗号化されない
認証公開鍵認証やパスワード認証パスワード認証のみ
ポート番号TCPポート22TCPポート23
セッションの確立方法公開鍵暗号化を使用単なるTCP接続

Telnetは、通信内容が平文で送られるため、第三者によるデータの盗み見や改ざんが容易になってしまうのです。

SSHの重要性

SSHコマンドは、リモートサーバーへの安全な接続を確立するためのプロトコルです。

以下にSSHコマンドの重要性についていくつかのポイントを挙げます。

SSHコマンドの基本構文

SSHコマンドの書き方は簡単です。

基本構文と少し応用した使い方までご紹介します。

接続するための基本コマンド

SSHコマンドの基本構文は以下の通りです。

ssh ユーザー名@ホスト名

#ドメイン名でアクセスする例
ssh user@example.com

#IPアドレスでの接続も可能
ssh user@192.168.11.31

SSHコマンドのオプション例

SSHコマンドには、接続時の動作を変更するオプションがいくつかあります。

例えば、ポート番号を指定する場合は以下のようになります。

ssh -p ポート番号 ユーザー名@ホスト名

ssh -p 2222 user@example.com

SSHのセットアップ

PCによってはSSHのセットアップが必要な場合があります。

とくにWindowsを使っている方は、SSH接続のために事前設定は必須です。

よく使われるSSHクライアントとサーバーの紹介

まずはSSHクライアントとサーバーで、よく使われるものをご紹介します。

SSHクライアントとは、リモートサーバーに接続するためのツール。

SSHサーバーとは、SSHクライアントからの接続を受け入れる側のサーバーのこと。

SSHクライアントのインストール

SSHクライアントのインストールについては、macOSとLinuxでは不用な場合がほとんど。

Windowsでのみ、以下の手順でPuTTYなどのツールが必要になります。

  1. アクセス: PuTTYの公式ウェブサイト(https://www.putty.org/)にアクセス
  2. ダウンロードページ内の「Package files」>「putty-<version>-installer.msi」へ進みダウンロード
  3. インストール:インストールウィザードに従ってPuTTYをインストール
  4. PuTTYの起動:Windowsのスタートメニューやデスクトップに作成されたショートカットからPuTTYを起動します。
  5. 接続設定(ホスト):PuTTYのメインウィンドウで、「Host Name (or IP address)」欄に接続先のホスト名またはIPアドレスを入力
  6. 接続設定(Port):「Port」欄には、接続先のポート番号を入力(デフォルトポートは22)
  7. 保存と接続:セッション設定を保存する場合は、「Saved Sessions」欄にセッション名を入力し、「Save」ボタンをクリック
  8. ユーザー名とパスワードの入力:接続が開始されると、新しいウィンドウが表示されるので、ユーザー名・パスワードを入力

SSHサーバーの設定

SSHサーバーの設定は、主に以下の手順で行います。

Windowsでのインストール方法については、以下の記事で細かく解説しています。

SSHキーの生成と設定

SSHキーの生成とその設定方法をご覧ください。

SSHサーバーによっては、SSHキーでの接続が必要になる場合があります。

鍵ペアの生成

以下のコマンドを実行して、RSA鍵ペアを生成します。

ssh-keygen -t rsa -b 4096

公開鍵のペアを作成します。

公開鍵の登録

生成された公開鍵をリモートサーバー内の、「~/.ssh/authorized_keys」ファイルに追加。

公開鍵は、「*.pub」と.pubで終わっているキーのことです。

authorized_keysには以下のように記述されています。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC9ZIR1rI41SPmXLkbEjFAFxxxxxxxxxxxxxxxxxxO3nQUs5PXEsdbXWjxxxxx/+xxxxx/xxxxxxxxxx2kbJxTlsJVMVChPQClU/TAjv+z5VrQT6pPAPd8YBSYjuT1Z9XF+UXiw4HY1JrOQgUUR4iQ01zQhqjN5jbhd+xxxxxxxxxxxxxxxxxxxxCzK0LH1TLe/REQQj0kR+qSwdSRZlrxds77EBPF49j6t5ELiTvZEpb3T98xOAjNxw5/hqoRxOJzlTeMkREz+IVxsGTqhznwCkyjlC0Xlnp+SUcceHW9gtK9LyuI7a7rwMwzygLrjtBRB8/qC/7Sh10xxxxxxxxxxxxxxx+lwds/AdokMeawDIGeJyRPAGDFQbEoqDLam/xxxxxxxxxxxxxdsMbHO0GjX0dt9dcveevRP+AYr6U= user1@randomdigit-Pro.local
ssh-rsa AAAAB3NzaC1yc2EAAAADAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+imlsZnKHdaRPPv45WXW+4SHx61hHodsfQFXIjIELMVxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxj8bCmo5Qbw7JnlqC+4jeUcTAtCpeiAr5U3CMv1+xAtHCOuDiFjpCMwGfky920WO7PjEGPfclHJA031AQF/BI2XvSlJLnjeZ39axx0AqNVjthks5hmSAxxxxxxxxxxxxxxxxY4I8d1lmO3TjCl94nb7+zZjrFhxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx61VUC+q3/TmPKW/DyaWABRGa7jHEXx0iHJgsaHq/RF6Y1mQ7CEL8pTiOs3WF4J/s9+FjtV0jsIDZedHadHTN2uPelKhM47eAP99dS2DDaDgi1A6QAFE+EpRgH5L+vjOoheAq1tqwBP3aegAuEVlYtxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxNRUAoeE2CoXA8ckWFumJXfYucAaa7XE= xxx@homepc

※キーは一部伏せています。

秘密鍵の保管

秘密鍵は安全な場所に保管し、パスフレーズを設定して保護しましょう。

SSHでリモートサーバーに接続する方法

SSSHでリモートサーバーに接続する方法は2つ。

パスワード認証で接続

SSHコマンドを実行し、プロンプトに表示されるパスワード入力でリモートサーバーにアクセスします。

詳しくはこちらで解説しています。

鍵認証で接続

鍵認証を利用する場合、以下のコマンドで接続します。

ssh -i 秘密鍵のパス ユーザー名@ホスト名

詳しくはこちらで解説しています。

SSHコマンドの実践的な使い方

SSHコマンドを実際に使ってみましょう。

できることをご紹介していきます。

ファイル転送

scpコマンドを使ってリモートサーバーとファイルを転送できます。

SSH接続が確率されたうえで、scpコマンドを実行します。

scp ローカルファイル ユーザー名@ホスト名:リモートディレクトリ

具体例も含めてこちらをご覧ください。

ポートフォワーディング

SSHを使ってポートフォワーディングをおこなえます。

主に以下の2種類あるので、それぞれご説明します。

ローカルポートフォワーディング(Local Port Forwarding)

クライアントマシンの特定のポートをリモートマシンの別ポートにトンネル化して転送する方法です。

リモートマシン上のサービスにセキュアにアクセスできるようになります。

SSHコマンドでローカルポートフォワーディングを行うには、以下の構文を使用します。

ssh -L [ローカルポート]:[リモートホスト]:[リモートポート] [SSHサーバーのユーザー名]@[SSHサーバーのアドレス]

例えば、ローカルマシンのポート8080をリモートマシンのポート80にフォワーディングする場合、次のように実行します。

ssh -L 8080:localhost:80 user@example.com

リモートポートフォワーディング(Remote Port Forwarding)

リモートマシンの特定のポートをクライアントマシンの別ポートにトンネル化して転送する方法。

リモートマシンからクライアントマシン上のサービスにアクセスします。

SSHコマンドでリモートポートフォワーディングを行うには、以下の構文を使用します。

ssh -R [リモートポート]:[ローカルホスト]:[ローカルポート] [SSHサーバーのユーザー名]@[SSHサーバーのアドレス]

例えばリモートマシンのポート9090をクライアントマシンのポート9000にフォワーディングする場合、次のように実行します。

ssh -R 9090:localhost:9000 user@example.com

SSHトンネリング

SSHトンネリングを使って、セキュアな接続を確立します。

ssh -D ローカルポート ユーザー名@ホスト名

SSH設定のカスタマイズ

SSHの設定をカスタマイズして、より使用環境に近づける方法を見ていきましょう。

SSHの設定ファイルは以下の場所にあることがほとんどです。

/etc/ssh/sshd_config

接続タイムアウトの設定

変数「ClientAliveInterval」「ClientAliveCountMax」を変更して、接続タイムアウトをカスタマイズします。

キーボードインタラクティブ認証の設定

変数「ChallengeResponseAuthentication」 を 「yes」に設定して、キーボードインタラクティブ認証を有効にします。

バナーメッセージの表示

「Banner」を指定したファイルパスに設定することで、SSH接続時にバナーメッセージを表示できます。

SSHコマンドのオプション一覧

SSHコマンドでは、オプションを活用することで、さまざまな接続方法を指定できます。

以下にまとましたのでご覧ください。

オプション名説明
-1SSHプロトコルバージョン1を強制します。ssh -1 ユーザー名@ホスト名
-2SSHプロトコルバージョン2を強制します。ssh -2 ユーザー名@ホスト名
-4IPv4アドレスのみを使用します。ssh -4 ユーザー名@ホスト名
-6IPv6アドレスのみを使用します。ssh -6 ユーザー名@ホスト名
-Aエージェント転送を有効にします。ssh -A ユーザー名@ホスト名
-aエージェント転送を無効にします。ssh -a ユーザー名@ホスト名
-Cすべてのデータ通信を圧縮します。ssh -C ユーザー名@ホスト名
-c暗号化アルゴリズムを指定します。ssh -c aes128-gcm@openssh.com ユーザー名@ホスト名
-DSOCKSプロキシを設定します。ssh -D 8080 ユーザー名@ホスト名
-F設定ファイルを指定します。ssh -F /path/to/config ユーザー名@ホスト名
-fバックグラウンドで実行します。ssh -f ユーザー名@ホスト名
-i秘密鍵ファイルを指定します。ssh -i ~/.ssh/id_rsa ユーザー名@ホスト名
-Lローカルポートフォワーディングを設定します。ssh -L 8080:localhost:80 ユーザー名@ホスト名
-lリモートホストで使用するユーザー名を指定します。ssh -l ユーザー名 ホスト名
-Nリモートコマンドを実行せずに接続します。ssh -N -L 8080:localhost:80 ユーザー名@ホスト名
-nデータ入力を/dev/nullにリダイレクトします。ssh -n ユーザー名@ホスト名
-oオプションを指定します。ssh -o “Port=2222” ユーザー名@ホスト名
-pリモートホストのポート番号を指定します。ssh -p 2222 ユーザー

SSHのセキュリティ上のベストプラクティス

SSHを活用するのは、セキュリティで優れているのが理由です。

よりセキュアな接続を確立するために以下の方法をご紹介します。

接続先ホストの確認方法

ssh-keyscan コマンドを使って接続先ホストの公開鍵を取得し、信頼できるものか確認できます。

ssh-keyscan -H [接続先のIPアドレス]

パスワードポリシーの適用

強力なパスワードポリシーを適用し、ユーザーが安全なパスワードを使用することを強制しましょう。

ブルートフォースアタック対策

/etc/ssh/sshd_config ファイルを編集し、MaxAuthTries の値を制限して、ブルートフォースアタックを防げます。

fail2ban などのツールを使用して、繰り返しログイン試行を行うIPアドレスを一定期間ブロックすることも効果的です。

SSH接続のトラブルシューティング

SSH接続によるトラブルにも直面するはず。

よくあるトラブルなどをまとめました。

よくある問題と対処方法

SSHのセキュリティ対策

まとめ:SSHコマンドを活用してセキュアな接続を確立

当記事の内容をまとめます。

当記事では、SSHの概要から詳細な設定方法まで、詳しく解説してきました。

SSHはインターネット上でセキュアな通信を確立するための強力なツールです。

適切な設定とセキュリティ対策をおこなえば、SSHを安全かつ効果的に活用できます。

モバイルバージョンを終了