はじめに

この記事は「どうしてscp(Secure Copy)が使えないのにrcp(Remote Copy)が使えるの?」と首をひねっているサーバ運用・インフラ初心者の方を対象にしています。
scpはSSHベースでセキュア、rcpは古くて危険――という知識はあっても、実際の現場で「scpがタイムアウトするのにrcpは一発で通る」という経験をした方は多いはずです。本記事では、両コマンドがネットワーク上でどう動くかを追いながら、「なぜscpはブロックされてrcpは通るのか」を構造的に理解できるよう解説します。最後まで読めば、ファイアウォールやポート制御の設計意図が見えてきます。

前提知識

  • TCP/IPの基礎(ポート番号の概念を知っている)
  • SSHで22番ポートを使うことは知っている
  • Linuxでscp, rcp, ssh, rshのコマンドを打ったことがある(使い方は問わない)

scpとrcpの立ち位置と歴史的背景

scpはSSHプロトコル上で動くファイル転送コマンドで、通信は暗号化されます。一方、rcpは1980年代のBSDに起源を持ち、rsh(リモートシェル)上で動くため平文通信です。セキュリティの観点ではscpが優位ですが、rcpは「レガシーな環境で動かさざるを得ない」「ファイアウォールがrsh系を許可している」という特殊なケースで今も使われます。
重要なのは、scpはSSHのサブシステムとして動くため、SSHが通らない=scpも通らない、という点です。

なぜscpは失敗し、rcpは成功するのか

ポートとコネクションの違い

SSH(scp)
- 22番ポートだけで制御コネクションを張る
- ファイル転送に使うデータコネクションも22番で多重化(SSHプロトコル内部でチャネルが多重化される)
- ファイアウォールが「22番をDROP/REJECT」すれば、全体が通らない

rsh(rcp)
- 514番(rsh)または513番(rlogin)でコマンド用TCPコネクション
- データ転送用に別途TCPコネクションを毎回張る(ポート範囲は1023以下の空きポート)
- ファイアウォールが「1023以下を全部許可」「ESTABLISHED/RELATED を許可」だと、rcpは通る

実験で確かめる

  1. クライアント側でiptables -A OUTPUT -p tcp --dport 22 -j DROPとしてscpを実行
    Connection timed out
  2. 同様にiptables -A OUTPUT -p tcp --dport 514 -j ACCEPT--match state --state ESTABLISHED,RELATED -j ACCEPTとしてrcpを実行
    → 転送成功(file1 100% |*** ETA 0:00:00
  3. tcpdump -i any port 514 or portrange 1-1023で見ると、rshコネクションのあと、ランダムな高ポート→ランダムな低ポートへの新規TCPコネクションが張られているのが確認できる

ハマりどころ

  • 「22番は開いているのにscpがフリーズ」→ 実は出口側のプロキシがSSHプロトコルを嫌ってアプリケーション層で破棄している
  • 「rcpは通るがscpが通らない」→ セキュアに見えるが、ファイアウォールが古すぎて逆にrsh系を許可している
  • どちらも通らない → データコネクションが一方通行でフィルタされてRSTが返ってきている

セキュアに残す選択肢

rcpを諦めてscpが通らない理由を切り分けるには
1. ssh -vで握手までのログを確認
2. nc -vz host 22で到達性チェック
3. sshd_configでポートを443などに変更(出向きプロキシ回避)
4. 最終手段:sftp(SSH File Transfer Protocol)を有効にしてscp -Oで互換モードを切る

まとめ

  • scpはSSHの22番一本で多重化するため、22番がブロックされると完全に不通
  • rcpはrsh(514番)+別ポートのデータコネクションを使うため、「1023以下を許可」環境では通りやすい
  • 結果として「scpは不可能でrcpなら可能」が起こる
  • セキュリティを取るか、可用性を取るか――環境に応じて手段を選ぼう

次回は「sftpが通らない時に使えるポート443のSSHトンネル」について掘り下げます。

参考資料

  • OpenSSH アーキテクチャマニュアル
    https://www.openssh.com/manual/
  • BSD rcp(1) 歴史仕様
    https://man.netbsd.org/rcp.1
  • IANA サービス名・ポート番号一覧
    https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml