ホーム > ネットワーク管理 > ssh

SSH(Secure Shell) コマンドガイド

SSH(Secure Shell)は、リモートコンピュータに安全に接続し、コマンドを実行するためのネットワークプロトコルです。暗号化された通信を通じてデータのセキュリティを提供し、リモートサーバー管理、ファイル転送などのさまざまな用途に使用されます。このガイドを通じてSSHの主要機能と使用法を学んでみてください。

SSH 概要

SSHはクライアント-サーバーモデルで動作し、SSHクライアントを使用してSSHサーバーに接続します。基本的に22番ポートを使用し、強力な暗号化技術を通じて中間者攻撃やデータの盗聴といった脅威から通信を保護します。

SSHの主要機能

SSHは以下のような主要機能を提供します:

SSH 主要機能

  • リモートコマンド実行: リモートサーバーで直接コマンドを実行できます。
  • 安全なファイル転送: `scp` (Secure Copy) または `sftp` (SSH File Transfer Protocol) を通じて安全にファイルをやり取りできます。
  • ポートフォワーディング(トンネリング): ローカルポートとリモートポート間に暗号化されたトンネルを作成し、特定のサービスを安全に利用できるようにします。
  • X11フォワーディング: リモートサーバーのGUIアプリケーションをローカルPCで実行できるようにします。
  • SSHキーによる認証: パスワードの代わりに公開鍵-秘密鍵ペアを使用して、より強力で便利な認証方式を提供します。

主要SSHコマンド

SSHコマンドを使用してリモートサーバーに接続し、さまざまな作業を行う方法を学びます。各オプションを組み合わせて必要な機能を活用してみてください。

1. 基本接続と認証

2. 高度な機能とフォワーディング

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`ssh` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

SSH キーによる認証

SSHキーによる認証はパスワード認証よりもはるかに安全で便利な方法です。公開鍵と秘密鍵のペアを使用して認証し、パスワードの漏洩リスクを減らすことができます。

SSHキー生成

`ssh-keygen` コマンドを使用して公開鍵と秘密鍵のペアを生成します。基本的に `~/.ssh/id_rsa` (秘密鍵) と `~/.ssh/id_rsa.pub` (公開鍵) ファイルが生成されます。

SSHキー生成コマンド

ssh-keygen -t rsa -b 4096

ディスクに新しいSSHキーのペアを生成します。キーの保存場所とパスワードを設定できます。

公開鍵の配布

生成された公開鍵(`id_rsa.pub`)をリモートサーバーのユーザーホームディレクトリ内 `~/.ssh/authorized_keys` ファイルに追加する必要があります。このファイルに公開鍵が登録されたユーザーは、その秘密鍵を使用してパスワードなしでサーバーに接続できます。

公開鍵をサーバーにコピー (ssh-copy-id使用)

ssh-copy-id user@hostname

`ssh-copy-id` コマンドを使用すると、公開鍵をリモートサーバーに簡単にコピーできます。最も推奨される方法です。

公開鍵手動コピー (scp使用)

scp ~/.ssh/id_rsa.pub user@hostname:~/
ssh user@hostname "mkdir -p ~/.ssh && cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && rm ~/id_rsa.pub"

もし `ssh-copy-id` を使用できない場合は、`scp` を使用して公開鍵ファイルをサーバーにコピーした後、手動で `authorized_keys` に追加できます。

SSH設定ファイル (~/.ssh/config)

SSH設定ファイル(`~/.ssh/config`)を使用すると、よく接続するサーバーの接続情報を事前に保存して便利に使用できます。複雑なオプションを毎回入力する必要がなく、エイリアス(Alias)として簡単に接続できます。

設定ファイルの例

次は `~/.ssh/config` ファイルの例です。複数のホストに対する接続設定を定義できます。

configファイルの内容

Host myserver
  HostName 192.168.1.100
  User myuser
  Port 2222
  IdentityFile ~/.ssh/my_server_key.pem

Host dev-web
  HostName dev.example.com
  User webadmin
  ForwardAgent yes
  LocalForward 8080 localhost:80

主要設定オプション

`config` ファイルで使用できる主要なオプションです。

  • Host: この設定ブロックのエイリアスです。 `ssh myserver` のように使用します。
  • HostName: 実際に接続するリモートホストのIPアドレスまたはドメイン名です。
  • User: リモートサーバーに接続するユーザー名です。
  • Port: 接続するポート番号です。
  • IdentityFile: 認証に使用する秘密鍵ファイルのパスです。
  • LocalForward: ローカルポートフォワーディングを設定します。 `LocalForward [local_port] [remote_host]:[remote_port]`
  • RemoteForward: リモートポートフォワーディングを設定します。 `RemoteForward [remote_port] [local_host]:[local_port]`
  • ForwardAgent: SSHエージェントフォワーディングを有効にします。複数のサーバーを経由して接続する際に便利です。
  • ServerAliveInterval: SSH接続が切断されないように定期的にサーバーに信号を送ります。 (秒単位)
  • StrictHostKeyChecking: ホストキーの確認の有無を設定します。 `yes` または `no`

設定ファイルを使用した接続

ssh myserver

`~/.ssh/config` ファイルに `myserver` というHostエイリアスを定義していれば、次のように簡単に接続できます。

使用例

SSHコマンドのさまざまな使用例を通じて、リモートサーバー管理やファイル転送などの実際のシナリオを学んでみてください。

基本SSH接続

ssh testuser@192.168.1.100

testuserという名前で192.168.1.100サーバーに接続します。パスワードを入力するように求められます。

SSHキー ファイルを使用して接続

ssh -i ~/.ssh/my_key.pem ubuntu@ec2-1-2-3-4.compute-1.amazonaws.com

パスワードの代わりに `~/.ssh/my_key.pem` 秘密鍵ファイルを使用してサーバーに接続します。 (クラウド環境でよく使われます)

リモートで単一コマンドを実行

ssh user@hostname "ls -l /var/log"

サーバーに接続せずにリモートサーバーで `ls -l /var/log` コマンドを実行し、結果をローカルに取得します。

ローカルポートフォワーディング (ウェブサービス接続)

ssh -L 8888:localhost:80 user@hostname

ローカルPCの8888番ポートを通じてリモートサーバーの80番ポート(ウェブサーバー)に接続します。まるでウェブサーバーがローカルにあるかのようにアクセスできます。

SCPを使ったファイルコピー (ローカル -> リモート)

scp mylocalfile.txt user@hostname:/tmp/

ローカルにある `mylocalfile.txt` ファイルをリモートサーバーの `/tmp/` ディレクトリにコピーします。

SCPを使ったファイルコピー (リモート -> ローカル)

scp user@hostname:/var/log/syslog .

リモートサーバーの `/var/log/syslog` ファイルをローカルPCの現在のディレクトリにコピーします。


同じカテゴリのコマンド