用 sftp 替換 scp
我們有一些同步腳本,用於客戶端使用 scp 將文件發送到由其提供商之一管理的遠端伺服器。最近關了,而且他們提供的新的不允許scp,只允許sftp(遠端伺服器上沒有辦法拿到shell,所以scp/rsync不能工作)。
是否有一種簡單的方法可以用 sftp 替換腳本中的 scp ?我想我所知道的最簡單的方法是使用 sshfs 並使用 cp 而不是 scp,但這非常難看。
看起來 sftp 可以使用 -b 傳遞包含命令的文件,但這意味著重新編碼部分腳本。我想知道是否有任何方法可以使用 sftp 作為 scp 的替代品,或者其他可以提供類似功能的軟體包?(即 sftp /source user@remote:/dest 或類似的東西,如果我可以只用 sed 腳本替換命令就完美了)
謝謝
通過 sftp 或 chroot sftp 進行 Rsync
編輯:需要明確的是,LFTP客戶端支持多種協議,包括 FTP、HTTP、FISH、SFTP、HTTPS、FTPS 和 BitTorrent。在此範例中,我們使用SFTP。客戶名稱引起了閱讀這篇文章的人們的一些困惑。
您可以使用
lftp
它的鏡像子系統通過 SFTP 複製 rsync 的行為。這也適用於 chroot 環境。lftp -u username, \ -e "set net:timeout 4;set net:max-retries 6;mirror -R --parallel=8 --no-perms --newer-than=now-2days --only-newer /source/ /source/;bye" sftp://hostname.domain
在此範例中,我省略了密碼,因為我們對目標主機具有 SSH 密鑰信任。
**注意:**不代表
-R
遞歸。該-R
標誌意味著推送到遠端。
--parallel=
是將作業分解成的執行緒數。當然,這可能會受到 MaxStartups in/etc/ssh/sshd_config
和 nofile pam 限制以及目標伺服器上的其他限制的限製或影響。
net:max-retries 6
我喜歡重試,以防萬一有網路維護。
net:timeout 4
放棄,然後在 4 秒後重試。
--no-perms
如果您不想更改遠端端的權限。
--newer-than
只是根據需要使用的範例。
--loop
可用於重複同步,直到未檢測到更改。
bye
我們不想忘記註銷而不是依賴空閒超時。LFTP 中還有許多其他選項可用。
我在使用 LFTP 的鏡像子系統和 SFTP 方面有很好的經驗。它的速度要快得多,因為它可以將作業分解為多個流。它甚至可以將單個文件分解為多個流。
使用 LFTP 的一個主要安全優勢是允許在您不希望自動化腳本訪問遠端端的 shell 的環境中傳輸文件。
我創建了一個工作展示,歡迎您進行測試。文件保留率很低,但歡迎您使用它來了解使用lftp和sftp chroot自動推送目錄/文件是多麼容易。只需安裝lftp然後創建一些臨時目錄或文件,然後:
mkdir -p ~/sftp_test/`date '+%Y%m%d%H%M'`/{1,2,3}/{a,b,c} lftp -u anon, -e "set net:timeout 4;set net:max-retries 4;mirror -R --parallel=4 --no-perms ~/sftp_test/ /private/;bye" sftp://ohftp.org