SSHとSCP:開発者が本当に理解すべき2つのツール

Table of Contents
サーバーを扱った経験がある方なら、おそらく何も考えずにターミナルでsshと入力したことがあるでしょう。しかし、真夜中の2時に締め出されたり、ファイル転送が何度も失敗したりすると、SSH(Secure Shell)とSCP(Secure Copy Protocol)の仕組みを知ることが非常に貴重になります。
SSHとは一体何なのか?
SSHは、リモートコンピュータにログインしてコマンドを安全に実行できるようにするものです。SSHが登場する前は、Telnetのようなツールはパスワードを含むすべてを平文で送信していました。SSHはセッション全体を暗号化することでこの問題を解決しました。
ポート22と接続性
デフォルトでは、SSHはポート22を介して接続します。これはシステムサービス用に予約された「ウェルノウンポート」です。執拗な攻撃者から身を隠すことはできませんが、SSHを非標準ポート(2222など)に移動することで、自動化されたブルートフォース攻撃を劇的に減らすことができます。
カスタムポートに接続するには:
ssh -p 2222 user@yourserver.com
SSHワークフローをレベルアップ
パスワード入力をやめる(SSHキーを使う)
パスワードは遅くて安全ではありません。Ed25519キーペアを生成しましょう(RSAよりも高速で安全です):
ssh-keygen -t ed25519 -C "your_email@example.com"
公開鍵をサーバーにコピーします。それ以降は、安全かつ瞬時にログインできます。
ssh-copy-id user@yourserver.com
SSHプロファイルを構成する
IPアドレスやポートを覚えるのはやめましょう。SSH設定ファイル(~/.ssh/config)を作成して、サーバーの分かりやすいエイリアスを作成します。
Host myserver
HostName 192.168.1.100
User alice
Port 2222
IdentityFile ~/.ssh/id_ed25519
これで、接続は次のように入力するだけで簡単になります。
ssh myserver
SCPでファイルを安全に転送する
SCPはSSHを内部で使用して、マシン間でファイルを転送します。構文は単純にscp source destinationです。
サーバーにコピー:
scp myfile.txt myserver:/home/alice/
サーバーからコピー(末尾の./に注意):
scp myserver:/home/alice/myfile.txt ./
SCPポートには大文字のP
SSHではカスタムポートに小文字の-pを使用しますが、SCPでは大文字の-Pを使用します。
scp -P 2222 myfile.txt user@server:/path/
SCPと代替手段
SCPは迅速なファイル転送に優れていますが、常に最適なツールであるとは限りません。
rsync: ディレクトリ同期の究極のツールです。変更されたデルタブロックのみを転送するため、大規模なディレクトリでは劇的に高速になります。(例:rsync -avzP local/ myserver:/remote/)- SFTP: SSH上で動作する堅牢なサブシステムで、対話的にファイルの閲覧、検索、名前変更、中断されたファイル転送の再開が可能です。
| 機能 | SCP | rsync | SFTP |
|---|---|---|---|
| ディレクトリの再開 | ❌ なし | ✅ あり (--partial) | ✅ あり |
| デルタ圧縮 | ❌ ファイル全体 | ✅ ブロックレベルの差分 | ❌ ファイル全体 |
| 対話型ナビゲーション | ❌ なし | ❌ なし | ✅ あり |
| 標準的な可用性 | ✅ どこでも | ⚠️ リモートにrsyncが必要 | ✅ どこでも |
SSHトンネリングとポートフォワーディング
SSHは、暗号化されたパイプを介して任意のTCPトラフィックをトンネルし、公開されていないプライベートデータベースへのアクセスや、ファイアウォールを安全にバイパスすることを可能にします。
1. ローカルポートフォワーディング (-L)
ローカルマシン上のポートを、公開されていないリモートの内部データベースに転送します。
# Connect local localhost:5432 to private RDS instance 10.0.1.25:5432 via bastion
ssh -L 5432:10.0.1.25:5432 user@bastion.example.com
2. 動的SOCKS5プロキシ (-D)
リモートサーバーを即座に暗号化されたブラウザプロキシに変えます。
# Start SOCKS5 proxy on local port 1080
ssh -D 1080 -N user@remoteserver.com
バスティオンホスト: SSH ProxyJump
最新のクラウドVPCでは、本番データベースやワーカーノードはプライベートサブネットに配置され、パブリックIPv4アドレスを持っていません。手動で踏み台(bastion)にSSH接続し、そこからジャンプする代わりに、ネイティブのProxyJump(-J)を使用します。
# ~/.ssh/config configuration for transparent bastion hopping
Host bastion
HostName bastion.production.internal
User ec2-user
IdentityFile ~/.ssh/bastion_key.pem
Host internal-worker-01
HostName 10.0.2.144
User ubuntu
ProxyJump bastion
IdentityFile ~/.ssh/prod_nodes.pem
これで、ssh internal-worker-01と入力するだけで、踏み台を経由してシームレスに認証され、自動的にルーティングされるようになります!
SSHのパーミッションとよくある落とし穴
SSHは、マルチテナントマシン上の悪意のあるユーザーが秘密鍵を読み取るのを防ぐため、厳格なファイルシステムパーミッションを強制します。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/authorized_keys
インタラクティブツール: オクタルおよびシンボリックなLinuxファイルパーミッションを確認する必要がありますか?当社の無料のLinux Chmod Permissions Calculatorを使用して、正確なパーミッションとumask値を素早く計算してください。
サーバー強化の重要な基礎
サーバーの玄関をブルートフォースボットに開けっ放しにしないでください!/etc/ssh/sshd_configを編集して設定を強化しましょう。
- パスワード認証を無効にする:
PasswordAuthentication noを設定します。 - rootログインを無効にする:
PermitRootLogin noを設定します。 - 最新の暗号を強制する: 鍵交換を
curve25519-sha256に制限します。 - ファイアウォールアクセス:
ufw allow from <your_ip> to any port 22でSSHポートの公開を制限します。 - Fail2Banをインストールする: 3回連続でハンドシェイクに失敗したIPアドレスを自動的に禁止します。
よくある質問
ssh-keygen -R hostname_or_ipを使用して古いホストエントリを削除してください。まとめ
SSHとSCPは、クラウドシステムとDevOpsインフラストラクチャの基盤となる配管です。Ed25519キーを採用し、~/.ssh/configプロファイルを構造化し、ProxyJumpとポートフォワーディングを習得し、sshd_configを強化することで、脆弱なリモートアクセスを暗号化された堅牢なワークフローに変えることができます。
こちらもおすすめ
Free In-Browser Developer Tools
Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.
Related Articles

Ubuntu Serverセキュリティ:実用的なLinux強化チェックリスト
SSHキーの強制、UFWファイアウォール、Fail2banによる侵入防止、自動アップグレード、auditdロギングなど、本番環境のUbuntuサーバーを強化するためのガイド。
Read more
本番環境におけるeBPF:低オーバーヘッドなLinuxオブザーバビリティ、トレーシング、カーネルプロファイリング
eBPFを使用して、オーバーヘッドを最小限に抑えたLinuxカーネルのオブザーバビリティを実装します。システムコールのレイテンシ測定、メモリ割り当ての追跡、サイドカーなしでのネットワークソケット監視を解説します。
Read more
Kubernetesにおけるゼロトラストセキュリティの実装: 完全なプロダクションガイド
Kubernetesにおけるフラットネットワークの境界セキュリティを排除するための実用的なガイドで、default-deny NetworkPolicies、SPIFFE/SPIREワークロードアイデンティティ、厳格なmTLSについて解説します。
Read more