MacOSCatalinaでFTP


自分のメモがわりに書いてますが、もし誰かの役に立てればいいなって思います。

背景:リモートワークでファイル共有したい

2020年05月、在宅勤務に慣れてきて余裕が少し生まれました。
そこで、ファイル共有方法で何かいいのがないか探しました。今までは、社内ネットワーク経由でファイル共有をしていたので速度とかどうネットに繋がってるかとかは気にしてませんでした(管理部の方がいい環境を用意してくれてます、本当にありがたいですね・・・)

VPN接続も提供してくださって社内ファイルにアクセスはできましたが、動画などの大きいファイルを共有するときにちょっと不安定になりました。Macとの相性が悪いんでしょうか・・・?

そこで管理部の方がftpサーバを用意してくださいました。
Windows環境で試したところ、従来のアップロード方法よりも安定してあげることができました!わ〜い
でもMacでやると・・・読み取り専用になります。

試した方法

MacのFinderからサーバに接続することはできます。

これを選択すると、接続したいサーバの名前やアドレスなどなど聞かれます。これでftp://なんちゃらとやって無事接続は成功しましたが、なぜか読み取り専用になりました。手元では設定を変えられず、サーバ側ではむしろちゃんと読み書きできるよう権限が付与されておりました。

なぜなの??

原因

Apple側が、High SierraからTelnetやFTPを抜き取ったらしいです。セキュリティの都合上とおっしゃっているようです。
公式見解というわけじゃないのですが、ここではftpコマンドがないよって言われてますね。
後、こちらにも書いてありますね。記事の中では、推測ではあるがtelnetやftpよりもSSHやSFTPの方にシフトしたんじゃない?と書いてあります。

解決

というわけで、brewを使ってインストールしちゃいましょう。これから入れるやつは元々Appleのものと同じみたいですが、一応自己責任でお願いします!ちなみにinetutilsだとバグがありそうですので、こちらを使うといいみたいですよ。ここから引っ張ってきています。

# NFTP client & server (formerly known as LukeMFTP, presumably due to being developed by Luke Mewburn 
# and has been the default FTP for default FTP client included with NetBSD, FreeBSD, OpenBSD, DragonFly BSD, 
# Darwin (macOS), and MidnightBSD)
brew install tnftp 
brew install tnftpd 

# Telnet client & server
brew install telnet 
brew install telnetd

それか全部いっぺんに入れちゃうこっち。

brew install tnftp tnftpd telnet telnet

れっつ使ってみましょう

(したの使い方はミスってます・・・)

~ >> ftp [email protected]
ftp: [email protected]: codename nor servname provided, or not known

SSHの時とはやり方が違うんですね笑
こちらが正解です。

~ >> ftp
ftp> open WRITE.SERVER.ADDRESS.HERE
(省略)
Name (WRITE.SERVER.ADDRESS.HERE:user): WRITE_SERVER_USER_NAME_HERE
331 User WRITE_SERVER_USER_NAME_HERE OK. Password required
Password:
230 OK. Current directory is /
ftp>

サーバのIPアドレス、ユーザネームとパスを入力するとサーバに接続できました♪

コマンド

サーバ内の動き方やファイルの読み書きは少しだけいつもと異なります。
こちらに書かれております。
より詳しくはこちらの記事がありました。下の表にある程度まとめて書きます。

Command Description
ftp FTPを開始するときに
quit FTPを終了するときに
ls FTPサーバ内の現在の階層にあるファイルを表示
cd FTPサーバ内を移動する、タブ補完は効かない?
lcd Localデバイス内を移動するのに使います。これでサーバに移したいファイルがある階層(orサーバからコピーしたファイルを置く階層)に移りましょう。ちなみにこちらはタブ補完効きますが、毎回半角スペース付きで出てきます。
bin Plain-textファイルでないファイルを転送するために使います。バイナリーモードに移行!
ascii テキストファイルを転送するためにASCIIモードに移行!
get 単一のファイルをFTPサーバからローカルに転送するコマンド。get FILENAME
mget getと同様ですが、転送したいファイルが複数あるときにはこちらを。*とか?が有効です。
put 単一のファイルをローカルからFTPサーバに転送するコマンド。ローカルの階層を参照するのでタブ補完効きますよ!put FILENAME
mput putと同様ですが、転送したいファイルが複数あるときにはこちらを。*とか?が有効です。

mputをやるとファイル一個一個、丁寧に「このファイル転送していい?」って聞いてくるので若干もどかしいです・・・全部やっていいから・・・-yのオプションとかないんですかね?
あるそうです!
mputmgetにオプションで-iがありますね。
最初にftpを開始する際に以下のように-iオプションをつけちゃえばいいのです。ただ、ファイルの上書きなどは自動でされるので注意しながら行いたいですね。ちなみに-vオプションもあり、これでftpサーバで処理した内容を表示させることもできますよ。

ftp -i

後もう一点。ファイル転送サービスであるため、サーバ内のファイルの移動用のコマンドは用意されていないようです・・・なので転送先には十分気を付けましょう(WindowsのFFFTPならできますよ)

それでは、以上になります。良いリモートワークライフを〜!