•9 min read

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

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

サーバーを扱った経験がある方なら、おそらく何も考えずにターミナルでsshと入力したことがあるでしょう。しかし、真夜中の2時に締め出されたり、ファイル転送が何度も失敗したりすると、SSH(Secure Shell)とSCP(Secure Copy Protocol)の仕組みを知ることが非常に貴重になります。

Audio Briefing
0:00 / 0:00
SSHとは一体何なのか?

SSHは、リモートコンピュータにログインしてコマンドを安全に実行できるようにするものです。SSHが登場する前は、Telnetのようなツールはパスワードを含むすべてを平文で送信していました。SSHはセッション全体を暗号化することでこの問題を解決しました。

ポート22と接続性

デフォルトでは、SSHはポート22を介して接続します。これはシステムサービス用に予約された「ウェルノウンポート」です。執拗な攻撃者から身を隠すことはできませんが、SSHを非標準ポート(2222など)に移動することで、自動化されたブルートフォース攻撃を劇的に減らすことができます。

カスタムポートに接続するには:

ssh -p 2222 user@yourserver.com
Advertisement

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上で動作する堅牢なサブシステムで、対話的にファイルの閲覧、検索、名前変更、中断されたファイル転送の再開が可能です。
機能SCPrsyncSFTP
ディレクトリの再開❌ なし✅ あり (--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

Advertisement

バスティオンホスト: 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を編集して設定を強化しましょう。

  1. パスワード認証を無効にする: PasswordAuthentication noを設定します。
  2. rootログインを無効にする: PermitRootLogin noを設定します。
  3. 最新の暗号を強制する: 鍵交換をcurve25519-sha256に制限します。
  4. ファイアウォールアクセス: ufw allow from <your_ip> to any port 22でSSHポートの公開を制限します。
  5. Fail2Banをインストールする: 3回連続でハンドシェイクに失敗したIPアドレスを自動的に禁止します。

よくある質問

Ed25519はツイストエドワーズ曲線暗号を使用しています。4096ビットRSAキーよりも署名ハンドシェイクを大幅に高速に実行する68文字のコンパクトなキーを生成し、サイドチャネルタイミング攻撃に対して優れた耐性を提供します。
これは、サーバーの公開鍵フィンガープリントが変更されたときに発生します(サーバーの再インストール後によくあります)。リモートIPアドレスを確認し、ssh-keygen -R hostname_or_ipを使用して古いホストエントリを削除してください。
SCPは標準のSSHパイプを使用してファイルを完全に転送します。rsyncは両方のエンドポイントでローリングチェックサムを計算して、変更されたブロックのみを転送し、中断された転送の再開やファイルパーミッションの同期をサポートします。

まとめ

SSHとSCPは、クラウドシステムとDevOpsインフラストラクチャの基盤となる配管です。Ed25519キーを採用し、~/.ssh/configプロファイルを構造化し、ProxyJumpとポートフォワーディングを習得し、sshd_configを強化することで、脆弱なリモートアクセスを暗号化された堅牢なワークフローに変えることができます。

こちらもおすすめ

Share this article:

Stay Updated

Get the latest posts delivered straight to your inbox.

Free Developer Utilities

Free In-Browser Developer Tools

Clean AI CLI logs, build cron expressions, decode JWTs, and calculate chmod permissions offline.

Explore Tools
Advertisement