从不同路径复制多个文件的智能方法usinc scp

Mic*_*ato 9 ssh scp

我想知道一种简单的方法来使用scp来复制文件系统上不同路径中存在的文件和文件夹.ssh目标服务器请求密码,我不能把它放在配置文件中.我知道scp没有我可以从脚本提供的密码参数,所以现在我必须逐个复制每个文件或目录,每次都写入我的密码.

Hac*_*chi 12

除了已经提到过的glob:

您可以使用{,}在一个语句中定义备用路径/路径部分

例如: scp user@host:/{PATH1,PATH2} DESTINATION

  • 请注意,如果要避免两次输入密码,则必须引用或转义大括号,以便shell不会展开它们.例如`scp'user @ host:{PATH1,PATH2}'DESTINATION` (8认同)
  • 那目标路径呢?有没有办法像`scp'user @ host:{PATH1,PATH2}'DIRECTORY / {FILE1,FILE2}`这样的东西? (2认同)

aer*_*man 10

这个网站

打开主

SSHSOCKET=~/.ssh/myUsername@targetServerName ssh -M -f -N -o ControlPath=$SSHSOCKET myUsername@targetServerName

根据需要打开和关闭其他连接而无需重新进行身份验证

scp -o ControlPath=$SSHSOCKET myUsername@targetServerName:remoteFile.txt ./

关闭主连接

ssh -S $SSHSOCKET -O exit myUsername@targetServerName

它直观,比创建密钥对更安全,比创建压缩文件更快,对我有用!


Cel*_*ada 5

如果您可以使用单个 glob 模式表达要从远程系统复制的文件的所有名称,那么您可以在单个scp命令中完成此操作。不过,此用法仅支持本地系统上所有文件的单个目标文件夹。例如:

scp 'RemoteHost:/tmp/[abc]*/*.tar.gz' .
Run Code Online (Sandbox Code Playgroud)

复制远程系统中名称以、或(something).tar.gz开头的子目录中的所有文件。单引号是为了保护 glob 模式不被本地系统上的 shell 解释。/tmpabc

如果您无法将要复制的所有文件表示为单个 glob 模式,并且您仍然希望使用单个命令(以及单个 SSH 连接,该连接仅要求您输入密码一次)来完成复制,那么您可以:

  • 使用与 不同的命令scp,例如sftpor rsync、 or
  • 打开与远程主机的 SSH 主连接,并作为该主主机的从机运行多个 scp 命令。从属设备将搭载主连接,该连接始终保持打开状态,并且不会要求您输入密码。阅读 ssh 联机帮助页中有关主从连接的信息。