如何在运行其他 bash 命令时保持与 SFTP 的连接打开

如何在运行其他 bash 命令时保持与 SFTP 的连接打开

问题

我正在使用 sshpass 和 scp 从 SFTP 服务器下载文件,但是我下载的文件很小,而且我在短时间内发出了太多请求,以至于我的服务器变慢了,因为它看起来很可疑。

是否可以保持 ssh 连接打开,同时 bash 脚本下载初始文件、处理该文件,然后循环移动到下一个文件?

考虑到我被他们糟糕的 SFTP 困扰了,有没有更好的方法来解决这个问题?

示例代码

 while read i; do
        # i in this case, is the entire file path
        # so we can select the last part 
        just_filepath=$(echo $i  | awk -F "/" '{print $NF}')

        if sshpass -f ftp_pass.txt scp -r $ftp_user_address:$i "clients/$bq_dataset/"$just_filepath >> "debug/upload_dl_debug.log" 2>&1; then
            bash_log "successfully downloaded $just_filepath from FTP"
        else
            bash_log "failed to download $just_filepath from FTP"
        fi

        ...
        processExternalLogs $just_filepath
        ((x++))
done <ftp_file_list.txt

背景

我有一个小型 Digital Ocean 服务器,用于在将日志提供给 BigQuery 进行分析之前对其进行处理。

由于服务器没有太多空间,执行所有处理的 bash 脚本会逐个下载每个文件,进行处理,然后将其上传到 BigQuery,然后删除该文件以释放空间供将来使用。

我目前正在使用的客户的 SFTP 是公共托管上的廉价 SFTP,他们无法控制。

由于我下载的文件非常小,处理速度非常快,多次尝试连接 SFTP 最终看起来可疑(我猜),最终我受到了速率限制。脚本仍然有效,只是速度非常慢。

文件太多,无法一次性全部下载到我的 DO 框中,因此我想知道是否有一个巧妙的方法,让我可以在处理日志的同时保持 SFTP 连接打开。

相关内容