scp (v4) 从远程复制到多个本地文件名

scp (v4) 从远程复制到多个本地文件名

我做了很多谷歌搜索,我认为我想要做的事情对于 openssh/scp v4.x 是不可能的,但想在这里询问,以防有人有创造性的解决方法。

我想将多个文件从远程主机(我不想要整个目录,但我知道文件名并且它们是静态名称)复制到本地目录,但我希望每个文件都有一个新名称 - 我想要机器名称放在文件名前面。

另外,我尝试这样做的原因是每个远程主机只有 1 个登录名(没有 ssh 密钥)(不想为每个文件输入密码)。

这就是我所拥有的:

machine="server1.nyc.ny"
logdir="/var/log/jboss"
logs="garbage.log splunk.log jboss.log"

for BOX in ${machine[@]};do
scp $BOX:$logdir/\{"${logs[0]}","${logs[1]}","${logs[2]}"\} ./
done

这适用于通过 1 次登录远程主机来获取所有文件,但最终,我将拥有多个远程主机,因此我想将计算机名称添加到日志文件名中 - 即:server1.nyc.ny-garbage.log

获取文件的相同语法不适用于目标。我的 ssh/scp 是 v4,所以我无法使用 ControlPersist 选项。

有什么创意解决方案吗?非常感谢!

ps:日志文件名数组在这里不是必需的,但我使用它是因为有些用户有 ssh 密钥,因此使用这些数组的嵌套循环非常适合他们。我需要一个针对没有 ssh 密钥的用户的解决方案,从而最大限度地减少密码输入量。

答案1

我可能遗漏了一些东西,但看起来您只需要一个额外的mv步骤来重命名复制的文件。就像是:

machine="server1.nyc.ny"
logdir="/var/log/jboss"
logs="garbage.log splunk.log jboss.log"
targets=""

for BOX in ${machine[@]};do
    scp $BOX:$logdir/\{"${logs[0]}","${logs[1]}","${logs[2]}"\} ./
    for log in ${logs[@]}; do
        mv "$log" $BOX_"$log"
    done
done

相关内容