要從紐約的主機上面拉檔案回台灣,發現 SFTP 速度只有 20KB/sec,這是因為目前 SSH 實做的方式對 latency 很敏感,在「High Performance SSH/SCP - HPN-SSH」這篇有提到相關的問題以及針對 OpenSSH 的 patch。不過,我想要用 freebsd-update 維護系統的 security update,所以我不想動到系統內的 OpenSSH。
另外一個想法是透過 FTPS 抓檔案,有不少 server software 都有支援 FTPS。在找 bsdftpd-ssl 的資料時找到以前寫的「在 FreeBSD 上支援 SSL 的 ftpd」這篇,結果發現這篇文章是因為當初 bsdftpd-ssl 在 FreeBSD 上無法編譯而改用 ftpd-tls 所寫的。現在這個問題已經解決了,但找不到之前用 bsdftpd-ssl 所設的設定可以抄,只好再 man ftpd-ssl
看一次參數。
除了先到 ports 的 ftp/bsdftpd-ssl
目錄下安裝外,還需要產生 self-signed certification。產生的步驟可以參考「OpenSSL Command-Line HOWTO」這篇的「How do I generate a self-signed certificate?」這個部份。把 certification 輸出到 /etc/ssl/certs/ftpd.pem
(如果目錄不存在則建立一個),並把檔案權限改成 600 或是 400。
再來是設定 /etc/rc.conf.local
(bsdftpd-ssl 不屬於 system 內建軟體,所以放到 local),增加兩行:
bsdftpd_ssl_enable="YES"
bsdftpd_ssl_flags="-D -h -l -p /var/run/ftpd.pid -z secure"
然後用 /usr/local/etc/rc.d/bsdftpd-ssl start
跑起來就可以了。測試時要注意 active 與 passive 以及防火牆的設定,在 debug 時除了錯誤訊息外,可以用 sockstat | grep ftpd
以及 tcpdump 觀察。
實際抓一個 500MB 的檔案,到最後面可以跑到 295KB/sec,比起 SFTP 快上不少。