Ssh

用 sftp 替換 scp

  • November 24, 2020

我們有一些同步腳本,用於客戶端使用 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 的環境中傳輸文件。

我創建了一個工作展示,歡迎您進行測試。文件保留率很低,但歡迎您使用它來了解使用lftpsftp 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

引用自:https://serverfault.com/questions/836103