つらみ:終了コードが緑でも意味互換とは限らない
1 CI だけ新しい OpenSSH。 同じ scp -r dist/* … ~/upload/ がグロブやパスで落ち、鍵疑いがちです。
2 scp 万能化。 増分・再開・マニフェスト弱く、SFTP 既定でレガシー癖が先に破綻します。
3 SFTP/chroot。 internal-sftp 下の scp はパスを厳密にし、曖昧宛先が露呈します。
4 並列 CI。 同時書き込みは部分ファイルと rename 嵐。同時接続記事とセットで。
5 転送≠リリース。 ステージング+symlink なしでは半端ツリーが「SSH 不具合」に見えます。
6 監査とバイト。 ログと チェックサムが分断だと学習が止まります。
7 scp -O 恒久化。 橋であって設計ではなく、レビューで負債扱いされつつあります。
8 展開の責務不明。 SFTP 背後ではグロブ位置が変わるため、短い設計メモで開発と運用のすれ違いを減らします。
OpenSSH 9 が同じ scp コマンドの背後を変えた理由
OpenSSH 9.0 は scp を SFTP へ寄せ、旧 scp/rcp の弱点を減らす流れです。チルダ、リモートグロブ、リダイレクト前提など、昔の記事が書かない差が表面化します。
CI は非対話のため警告に気づきにくく、イメージ更新だけで「急に壊れた」ように見えます。ssh -V を並べるまで原因が見えないことが多いです。
scp -O は方針が許す範囲の切り分け用。恒久は sftp -b か、削除と再開を明示した rsync です。先に プロトコル意味論を読むと議論が空転しません。
WAN では スループット記事とセットで調整し、踏み台は 単一入口ガイドの ProxyJump を CI と共有します。ランナーとリモート Mac の版ドリフトはピン留めか明示的な許容にします。
スキャナのレガシー scp 指摘は移行期限の合図とし、バッチを Git 管理して再現性を残します。性能は前後計測します。
「ネットが不安定」の神話を止める基準
アップロードのたびに、所要時間・バイト数・ファイル数・リトライ・更新後初回成功ビルドを残し、議論を数字に寄せます。CI ログへ ssh -V と実コマンド、リモート Mac の sshd -T 抜粋をセットで保管します。
小さなテキスト、実行ビット付き、空白/Unicode パスをプローブにし、subsystem や Permission denied をクライアント・Match・ACL のどれかへ対応づけます。転送後は チェックサム記事の型でダイジェストをメタに載せます。
共有入口は MaxSessions/keepalive を転送変更と切り離して記録。scp -O を四半期で減らし、rsync --partial を整合性と結びます。ロールバックは 原子リリースと比較し、多チームは接頭辞で名前空間化します。
本番 symlink 前に捨て接頭辞でドライランし、PR で scp -O 検知も。CI と同じバッチをローカル再現します。
判断表:既定 SFTP の scp、scp -O、sftp -b、rsync
| 手段 | 得るもの | 代償 | 向く場面 |
|---|---|---|---|
| scp(SFTP 既定) | 短い単純コピー | グロブ・パス差、増分なし | 小さな静的ドロップ |
| scp -O | 互換試験が速い | レガシー圧 | 移行窓の暫定のみ |
| sftp -b | 明示リスト、Git レビュー | エラー処理・chmod 自前 | 監査向き CI |
| SSH rsync | 増分・再開・ミラー | 複雑、--delete 注意 | 毎ビルドで変わるツリー |
迷ったら 転送の意味を先に。
手を動かす:止血してから計画的に移す
# 0) Record versions (client and server)
# ssh -V
# 1) Temporary legacy scp (only if policy allows)
# scp -O -r ./dist/ user@remote-mac:~/staging/dist/
# 2) sftp batch example (batch.txt)
# put -r ./dist /upload/staging/dist
# chmod 644 /upload/staging/dist/index.html
# bye
# sftp -b batch.txt -o BatchMode=yes user@remote-mac
# 3) rsync with staging-friendly flags (tune deletes carefully)
# rsync -av --partial --delay-updates ./dist/ user@remote-mac:/Volumes/builds/app/dist/
# 4) Integrity gate (example)
# shasum -a 256 dist/manifest.json
# 5) Spot-check sshd session logs (example on macOS)
# log show --predicate 'process == "sshd"' --last 5m
バッチはコード隣に置き、rsync --delete はレビュー必須。チェックサム記事の戻し方を添えます。
読む順番:意味、同時性、整合、リリース
推奨順:意味→同時接続→チェックサム→原子リリース→ホーム。レイヤーを飛ばすと空回りや静かな破損が増えます。
許可リストと既定引数を共有し、稼働率と失敗率を同図に。四半期で scp -O を減らし、短い回帰と軽い結合テストを回します。
FAQ と SFTPMAC ホスト型リモート Mac を選ぶ理由
scp -O に一本化してよいですか?
一時の橋に留めてください。サプライチェーンやセキュリティレビューでは、SFTP かマニフェスト付き rsync が期待されつつあります。
sftp -b と rsync はどう切り分けますか?
決定的な put/get 一覧と chmod が主目的ならバッチ。増分・再開・統制したディレクトリミラーが要るなら rsync です。
CI だけ落ちて手元は成功するのは普通ですか?
よくあります。OpenSSH の版差と非対話シェルが展開を変えるので、先に版を揃えてからスクリプトを書き換えます。
まとめ: OpenSSH は scp を SFTP へ寄せました。-O で時間を買い、sftp -b か rsync とチェックサム・原子リリースへ接続してください。
限界: 自前運用はパッチとオンコールが続きます。SFTPMAC ホスト型リモート Mac は運用を集約し、入口を予測しやすくします。アップロードレビューと symlink 切替のオーナーを固定し、四半期レビューとサポート件数で効果を測ります。
ホスト型リモート Mac は SFTP/rsync 入口と運用の型で、繰り返し可能なアップロードを支えます。
