SSHマスターガイド:コマンドライン必須リファレンス
ログイン、鍵認証、ファイル転送、ポートフォワーディング、再利用可能なホスト設定など、実践的なSSHコマンドを学びます。
SSHを極める:必須コマンドラインガイド
Secure Shell(SSH)プロトコルは、リモートシステムへの暗号化されたログイン、コマンド実行、ファイル転送を提供します。サーバーを管理するなら、いくつかのSSHコマンドラインの習慣が作業をより速く、安全にします。
このガイドでは、リモートログイン、鍵認証、scp、sftp、ローカルポートフォワーディング、~/.ssh/configエイリアスなど、最もよく使うコマンドをカバーします。
安全なリモートログインの確立
SSHの最も一般的な用途は、リモートサーバーへのターミナル接続を安全に行うことです。基本構文はシンプルですが、セキュリティと使いやすさを向上させる重要なオプションがあります。
基本接続構文
標準コマンドでは、リモートユーザーとホストアドレス(IPまたはドメイン名)を指定する必要があります:
ssh [user]@[host]
# 例:
ssh [email protected]
非標準ポートの指定
セキュリティ上の理由から、多くの管理者はデフォルトのSSHポート(ポート22)を変更します。-pフラグを使用して別のポート番号を指定します:
ssh -p 2222 [email protected]
単一リモートコマンドの実行
SSHはインタラクティブシェルを開くだけではありません。リモートサーバーで単一のコマンドを実行し、その出力をローカルに返すことができ、スクリプトやクイックチェックに非常に便利です。
# リモートサーバーの /var/log ディレクトリで 'ls -l' を実行
ssh user@host 'ls -l /var/log'
# サーバーの稼働時間を確認
ssh user@host uptime
SSH鍵による認証管理
パスワード認証はブルートフォース攻撃にさらされることがよくあります。SSH鍵は、自分のマシンに秘密鍵、リモートサーバーに公開鍵を使用するため、サーバーはパスワードを受け取らずにあなたを確認できます。
鍵ペアの生成
まだ鍵ペアを持っていない場合は、ssh-keygenを使用して生成できます。秘密鍵を保護するために強力なパスフレーズを使用するのがベストプラクティスです。
ssh-keygen -t ed25519 -C "[email protected]"
RSA鍵も、特に古いシステムでは一般的です。現代のOpenSSHセットアップで新しい鍵を作成する場合、Ed25519が通常よりシンプルなデフォルトの選択肢です。
公開鍵をサーバーにコピー
ssh-copy-idユーティリティは、ローカルの公開鍵をリモートユーザーの~/.ssh/authorized_keysファイルにインストールする最も簡単な方法です。通常は一度パスワードを入力すれば、以降のログインでは鍵を使用できます。
# デフォルトの公開鍵をサーバーにコピーし、一般的な権限を設定
ssh-copy-id user@host
ヒント:秘密鍵の使用 秘密鍵がデフォルトの場所(
~/.ssh/id_rsa)にない場合、接続時に-iフラグを使用してそのパスを指定する必要があります:ssh -i ~/.ssh/my_custom_key user@host
安全なファイル転送
SSHは安全なファイル転送のために2つの主要なツールを提供します:scp(セキュアコピー)とsftp(セキュアファイル転送プロトコル)。
A. セキュアコピー(scp)の使用
scpは、シンプルで迅速な1回限りのファイル転送に最適で、標準のUnix cp(コピー)コマンドをモデルにしたコマンドラインインターフェースを提供します。
ローカルからリモートへのファイル転送
# 構文:scp [ローカルファイル] [ユーザー]@[ホスト]:/[リモートパス]
scp deployment.tar.gz user@webserver:/var/www/uploads/
リモートからローカルへのファイル転送
# 構文:scp [ユーザー]@[ホスト]:/[リモートファイル] [ローカルパス]
scp user@dbserver:/var/log/backup.sql .
ディレクトリの再帰的コピー
-rフラグを使用して、ディレクトリ構造全体をコピーします。
scp -r ~/project_files/ user@buildserver:/home/user/builds/
B. セキュアファイル転送プロトコル(sftp)の使用
sftpは、従来のFTPクライアントと同様のインタラクティブセッションを確立しますが、SSHを介して安全に行われます。リモートディレクトリのナビゲート、ファイルの一覧表示、1回のセッション内での複数転送に適しています。
sftpセッションの開始
sftp user@host
一般的なsftpセッションコマンド
| コマンド | 説明 |
|---|---|
ls |
リモートファイルを一覧表示 |
lls |
ローカルファイルを一覧表示 |
get filename |
リモートサーバーからファイルをダウンロード |
put filename |
リモートサーバーにファイルをアップロード |
cd /path/ |
リモートディレクトリを変更 |
lcd /path/ |
ローカルディレクトリを変更 |
quit |
sftpセッションを終了 |
SSHトンネリングとローカルポートフォワーディング
SSHトンネリング(ポートフォワーディング)を使用すると、非セキュアプロトコルの接続を暗号化したり、ジャンプホストを介して内部ネットワーク上のサービスにアクセスしたりできます。最も一般的な形式はローカルポートフォワーディングです。
ローカルポートフォワーディング(-L)
ローカルフォワーディングは、ローカルマシンのポートからSSHサーバーを介してリモートホストの指定されたポートにトラフィックをルーティングします。これは、パブリックインターネットに直接公開されていない内部データベース、Webインターフェース、またはプロプライエタリサービスにアクセスするのに便利です。
シナリオ: プライベートな内部Webサーバー(jumpboxからのみアクセス可能)のポート80にアクセスしたい。
# 構文:ssh -L [ローカルポート]:[宛先ホスト]:[宛先ポート] [ユーザー]@[ジャンプボックス]
ssh -L 8080:internal-web.lan:80 user@jumpbox -N
-L 8080:internal-web.lan:80:ローカルマシンのポート8080に到着したトラフィックは、jumpboxを介してinternal-web.lanのポート80に転送されます。-N:SSHにリモートコマンドを実行しないよう指示し、単にトンネルを設定します。
接続が確立されると、ローカルブラウザでhttp://localhost:8080にアクセスして内部サイトにアクセスできます。
SSH設定ファイルによる効率化
カスタムポート、ユーザー名、鍵パスを含む複雑なSSHコマンドを手動で入力するのは非効率的です。SSH設定ファイル(~/.ssh/config)を使用すると、頻繁にアクセスするサーバーのエイリアスと設定を定義できます。
設定例(~/.ssh/config)
ファイル~/.ssh/configを作成または編集し、次の構造にします:
# サーバー1:標準鍵、非標準ポート
Host dev-web
HostName 10.0.0.50
User deployment_user
Port 2222
IdentityFile ~/.ssh/id_rsa_dev
# サーバー2:鍵認証が必要なジャンプボックスアクセス
Host production-db
HostName 10.0.20.15
User sysadmin
IdentityFile ~/.ssh/prod_key
LocalForward 54320 127.0.0.1:5432
2番目の例では、ssh production-dbを実行すると、ワークステーションにローカルポートが開きます。その後、PostgreSQLクライアントをlocalhost:54320に向けると、SSHがリモートホストから見た127.0.0.1:5432にトラフィックを運びます。
エイリアスでの接続
設定が完了すると、接続が劇的に簡単になります:
# 10.0.0.50のポート2222にdeployment_userとして接続
ssh dev-web
# 接続し、自動的にポートフォワーディングを設定(設定されている場合)
ssh production-db
重要なポイント
ssh user@hostから始め、鍵ベースの認証を追加し、繰り返しのオプションを~/.ssh/configに移動します。これらの基本が固まったら、ssh -Lを使用したローカルフォワーディングにより、プライベートサービスをネットワークに直接公開せずに制御された方法でアクセスできます。