使用 SSH 传输文件的脚本

使用 SSH 传输文件的脚本

我想从服务器上的目录传输特定类型的文件。以下是场景:

目录结构是

公司/compA/filedir/
公司/compB/filedir/
公司/compC/filedir/

所以我想将 *.csv 文件从每个公司的 filedir 目录移动到其他服务器。我想使用 ssh 进行文件传输。有人在 shell 脚本中使用 ssh 进行文件传输吗?你如何处理这种情况?

答案1

使用scprsync

scp使用 ssh 在连接的计算机之间复制文件。从本地计算机复制到远程主机的示例语法:

scp -r companies/compA/filedir [email protected]:/some/remote/directory

如果您尚未执行此操作,则需要使用公钥/私钥来方便登录ssh

rsync可以使用 ssh 连接到另一台服务器。示例语法如下:

rsync -avz -e ssh remoteuser@remotehost:/remote/dir /companies/compA/filedir

它还需要启用公钥/私钥。

答案2

您实际上可能想要使用使用 SSH 的 scp。如果您想改用 rsync,则需要使用参数-e ssh

至于脚本,您可能会创建 1)一个 for 循环,该循环遍历包含所有位置列表的数组并运行相应的 scp/rsync 命令,或者 2)您可以使用 find 语句,该语句遍历并为您执行每个 scp/rsync 命令。

find 命令示例如下(未经测试):

find /dir/companies/*/filedir/ -type f -name \*.csv -exec scp {} [email protected] \;

我建议如果您使用 SSH 进行任何类型的传输,请设置某种公钥身份验证,这样就不会提示您输入密码。

如果需要的话,我可以更详细地讲解,只是想帮助您入门并指明正确的方向。

答案3

您不会使用 ssh 程序 - 您应该使用 scp 或 sftp。但话虽如此,更好的解决方案是通过 ssh 运行 rsync 以避免复制您已经收到的文件 - 但这仅在 rsync 可用(或可以在远程系统上安装)时才是一种选择。

为了避免提供密码,您需要先设置一个密钥对,然后:

#!/bin/bash

scp somuser@server:/companies/compA/filedir/*.csv /local/compa/filedir
scp somuser@server:/companies/compB/filedir/*.csv /local/compb/filedir
scp somuser@server:/companies/compC/filedir/*.csv /local/compC/filedir

答案4

scp company/comp?/filedir/*.csv 192.168.1.200:/remotedir 为 192.168.1.200 远程服务器 ip。

如果需要用户和密码,则应查看 scp 手册 (man scp),但我认为您无法在 scp 命令中指定这些。相反,您应该使用密钥。

相关内容