MacのFTPクライアント選び|標準で足りる範囲から決める
ftp client macという言葉で検索が始まるのは、たいてい何かが失敗したあとです。サーバー会社から届いた接続情報をそのままFinderに入れたらつながったのに、ファイルを置こうとすると跳ね返される。あるいはターミナルでftpと打ったら、そんなコマンドは無いと言われる。どちらもmacOSの仕様どおりの動きで、理由を知ると「クライアントを入れるべきか、そもそも別のやり方に移るべきか」が先に決まります。
macOSに入っているものと、入らなくなったもの
現行のmacOSには、コマンドラインのftpが入っていません。シェルでwhich ftpと打っても何も返りません。同じ時期にtelnetも外れており、いま手元にこれらがある場合は、HomebrewやMacPortsで後から入れたものです。
一方で、残ったほうが実務では強力です。OpenSSHが同梱されているので、sftpとscpは/usr/binに最初から置かれていて、何も入れずにそのまま使えます。curlも同梱されており、curl --versionが表示するプロトコルの行を一度見ておくと、よくある行き止まりの理由が分かります。そこにはdict、file、ftp、ftps、http、https、imap、ldap、pop3、smb、smtp、telnet、tftpなどが並びます。
重要なのは、その行に載っていないものです。sftpとscpがありません。Appleが同梱しているcurlはSSHの対応を外してビルドされているためです。つまり、対話的なftpコマンドは無いのにcurlならFTPで通信でき、SFTPをやりたい人が真っ先に思い浮かべるcurlではSFTPができず、SFTPは別のコマンドが担当している、という分かれ方をしています。名前にFが付くものを1つの道具でまとめようとすると、ここで必ずつまずきます。
そして/sbin/mount_ftpは今も入っています。FinderのFTP接続はこれを使っており、アップロードできない理由もここにあります。
FinderのFTP接続は、読み出し専用で止まる
Finderの「移動」から「サーバへ接続」を開き、ftp://で始まるアドレスを入れると、リモートのフォルダがボリュームとしてマウントされます。ここからファイルを取り出すことはできます。置くことはできません。しかもこれは、サーバー側の権限設定の問題ではありません。サーバーに問い合わせる前の段階で、Mac側が止めています。
マウントを担当するコマンドの説明書には、その規則がはっきり書かれています。読み出し専用の指定は、指定しなくても必ず付けられる。リモートのサーバー上でファイルを書き込み用に開くことを許していないから、というのが理由です。アドレスにポート番号を書かなかった場合は21番が使われます。
Appleの案内も、利用者から見た同じ事実を書いています。
読み出し専用のアクセス権があれば、サーバからファイルをコピーできますが、サーバにファイルをコピーするには、ほかのFTPアプリが必要な場合があります。 出典: support.apple.com
同じページには、見落としやすいもう1つの手がかりがあります。アドレス形式の表には、SMB、NFS、WebDAVそれぞれの書き方の例が載っているのに、FTPの行だけがありません。接続できることは書かれているのに、他と同じ扱いはされていない。Finderは「FTPサーバーの中身を見るための窓」であって、送り出す口ではない、と割り切ったほうが実態に合います。
FTP・FTPS・SFTPは、名前が似ているだけの別物
同じ「FTP」という言葉で呼ばれているものが3種類あり、共通しているのは目的だけです。
- FTP。元祖のほう。ユーザー名もパスワードもファイルの中身も、暗号化されずにネットワークを流れる。制御用の接続を張ったあと、転送のたびに別の接続を張る作りなので、ファイアウォールと相性が悪く、パッシブモードという設定が長年の混乱の種になっている
- FTPS。FTPをTLSで包んだもの。普通につないでから暗号化に切り替える明示的な方式と、最初から暗号化された別ポートにつなぐ暗黙的な方式がある。片方に対応しているクライアントが、もう片方にも対応しているとは限らない
- SFTP。これはFTPではない。SSHの機能の1つで、SSHと同じポートを使い、認証もSSHと同じ。パスワードの代わりに鍵を使える。FTPから受け継いでいるのは文字だけ
| 通り道 | よく使うポート | 認証情報の状態 | macOSに同梱 | |
|---|---|---|---|---|
| FTP | 素のTCP | 21 | 読める状態で流れる | curl経由のみ |
| FTPS | TLS | 21または990 | 暗号化される | curl経由のみ |
| SFTP | SSH | 22 | 暗号化される | あり(sftpコマンド) |
ここから出てくる結論は少し意地悪です。「どのFTPクライアントを入れるか」の答えが「FTPクライアントを入れない」になる場合がかなりあります。契約先がSSHを提供しているなら、sftpはすでに手元にあり、すでに暗号化されていて、すでに鍵を使えます。それを確かめる前にアプリを探し始めると、要らない道具が1つ増えます。
契約しているサーバーが何を出しているかを先に確かめる
レンタルサーバーの管理画面は言葉の使い方が緩く、届いたメールの見出しは根拠になりません。3つの確認で片が付きます。
最初にSSHを試します。ssh ユーザー名@ホスト名でつながるなら、sftp ユーザー名@ホスト名も通り、それで決まりです。断られた場合は、接続そのものが拒否されたのか、認証で弾かれたのかを見分けます。前者はSSHが開いていない可能性、後者はSSHは開いていて資格情報が別に発行されている可能性を示します。
次に、素のFTPを手元の道具で試します。curl -v ftp://ホスト名/ と打つと、サーバーの応答、認証のやり取り、TLSの交渉が順番に表示されます。これはどのGUIクライアントより先に打つ価値があります。GUIは、この一連の段階を「接続できません」という1行に畳んでしまうからです。
最後に、契約先へ聞く質問を具体的にします。「FTPは使えますか」ではなく、「このアカウントでSSH経由のSFTPは使えますか。使えない場合、FTPSは明示的方式ですか、暗黙的方式ですか」と聞きます。共用サーバーではSSHが申請制だったり、接続元のIPアドレスを登録した場合だけ通ったり、FTPとは別のユーザー名が発行されていたりします。つながらないことは、提供されていないことの証明にはなりません。
パッシブモードと、日本語のファイル名が化けるとき
FTPで最初に当たる壁は2つです。
1つはパッシブモードです。接続はできるのにファイル一覧が出ないまま止まる場合、原因のほとんどはここにあります。FTPは転送のたびに新しい接続を張り、その接続をどちら側から張るかで動きが変わります。アクティブだとサーバー側からMacへ張り返すため、ルーターやファイアウォールに阻まれます。パッシブに切り替えると、接続を張るのは常にMac側になり、通ることが多くなります。多くのクライアントは既定でパッシブですが、設定を触った覚えがないのに一覧が出ないときは、まずここを見ます。
もう1つが日本語のファイル名の文字化けです。SFTPでは基本的にUTF-8で統一されているため起きにくいのですが、素のFTPでは、サーバー側が名前をどの文字コードで扱っているかがクライアントに伝わらないことがあります。この場合、クライアント側の文字コード設定を自動判別のままにせず、サーバーに合わせて明示します。判断のコツは、化けている場所を見ることです。Mac側で正しく見えていたファイルがサーバーに置いた瞬間に崩れるなら送信時の変換、サーバーにあるファイルの一覧だけが崩れるなら表示時の解釈が原因です。設定を変えたあとは、名前を変えたのではなく再取得して確かめます。
なお、Macのファイル名には濁点や半濁点の扱いに独自の癖があります。名前をコピーして貼り付けたつもりなのに検索に引っかからない場合は、文字コードではなくこの正規化の違いが原因のことがあります。
クライアント選びは、値段より「続き方」で決まる
プロトコルが決まってしまえば、選択肢は見た目ほど多くありません。主要なクライアントはFTPもFTPSもSFTPも話せます。違うのは、値段の付き方と、失敗した転送の扱いと、転送専用なのかファイル管理も兼ねるのかの3点です。
| クライアント | 費用 | ライセンスの形 |
|---|---|---|
| Cyberduck(公式サイト) | 無料 | オープンソース。寄付で成り立っており、10米ドル以上の寄付で寄付の案内を消す鍵が届く |
| Cyberduck(App Store) | 4,000円 | 同じアプリが有料の買い切りとして並んでいる |
| FileZilla | 無料 | オープンソース |
| Commander One | 本体は無料、PRO Packが29.99米ドル(Mac 1台) | PRO機能は15日間試せる |
| ForkLift 4 | 19.95米ドル(更新1年付き)/34.95米ドル(更新2年付き) | 対象バージョンは期限後も使い続けられ、更新だけが止まる |
| Transmit 5 | 45米ドル(7日間の試用後) | 買い切り。macOS 13.0以降が必要 |
表の上2行は同じソフトです。公式サイトから落とせば無料で寄付を募られ、App Storeに並んでいる同じアプリは4,000円の有料購入になります。どちらかが不当なのではなく、「無料」がソフトの性質ではなく配布経路の性質だという例です。
ライセンスの形は、金額よりも先に効いてきます。買い切りは、開発が止まってもその版は動き続けます。更新期間付きのライセンスも使い続けられますが、新しい版が届くのは購入時に決めた期間までです。オープンソースには期限がない代わりに、続ける義務も誰にもありません。どれが優れているかは決められず、その設定を何年触らずに置くつもりかで答えが変わります。
クライアントを入れたあとに残る工程
アップロードできない問題は解決しますが、残るものがあります。
大きなファイルを不安定な回線で送るときは、中断からの再開が要ります。SFTP側なら手元の道具に最初から入っていて、sftp -a は途中から続きを送り、対話中ならregetとreputが1ファイル単位で同じことをします。ただし説明書にある警告は守る価値があります。途中まで送ったファイルの中身が送り元と食い違っていた場合、再開の結果はほぼ壊れたファイルになります。中断の原因が回線ではなく編集だったときは、最初から送り直したほうが安全です。
ディレクトリごと送るsftp -r は、たどる途中のシンボリックリンクを追いません。プロジェクトの一部を別の場所へリンクで逃がしているMacでは、完了したように見えて中身が欠けたアップロードになります。
そして最後に残るのが窓の数です。クライアントを入れても、ファイルを探す窓、転送するアプリ、向こう側の状態を確かめるターミナル、と3つの窓を行き来する形になりがちです。転送そのものは数秒で終わり、切り替えのほうが長くなります。ここを詰めるなら、転送専用のアプリを増やすよりフォルダとターミナルとAIが同じ窓にある形のほうが効きます。窓を1つにまとめたときに何ができるのかはできることに整理してあり、転送専用アプリやFinderとの違いは他のファイル管理との比較で項目ごとに並べています。導入前に費用を確かめたい場合は料金を見てください。
まず打つべき1行は決まっています。ssh ユーザー名@ホスト名です。通ればクライアント選びは終わり、通らなければcurl -v ftp://ホスト名/ の出力を契約先に見せる。この順番を踏むと、比較検討に残るクライアントはたいてい2本に絞られます。
よくある質問
FinderでFTPサーバーにつないだのに、ファイルを置けません。設定が悪いのですか?
サーバー側の設定ではありません。macOSがマウントに使う仕組みが、読み出し専用の指定を必ず付けるためです。Mac側で止めているので、サーバーの権限を変えても解決しません。書き込みが必要なら、別のクライアントを使うか、SFTPに切り替えます。
ターミナルでftpコマンドが見つかりません。壊れたのでしょうか?
現行のmacOSにはftpコマンドが同梱されていません。which ftpが何も返さないのは正常です。FTPで通信したいだけならcurl ftp://ホスト名/パス が使えますし、SSHが使える契約ならsftpが最初から入っています。
無料のFTPクライアントを選ぶと、あとで費用が出ますか?
配布経路とライセンスによります。CyberduckやFileZillaのようなオープンソースには期限がありませんが、同じCyberduckでもApp Storeでは4,000円の有料購入です。Commander Oneのように本体無料でPRO機能が29.99米ドルという形もあります。期限が付くのは試用版で、機能の天井が付くのが無料版です。
日本語のファイル名が化けます。どこを直せばよいですか?
素のFTPでは、サーバーが使っている文字コードがクライアントに伝わらないことがあります。クライアントの文字コード設定を自動判別のままにせず、サーバーに合わせて指定してください。送った瞬間に崩れるなら送信時の変換、一覧だけが崩れるなら表示時の解釈が原因です。SFTPに移せる契約なら、そちらのほうが起きにくくなります。