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の現在のディレクトリにコピーします。