Linux 尝试使用SCP使用脚本将多个文件从远程复制到本地

Linux 尝试使用SCP使用脚本将多个文件从远程复制到本地,linux,bash,scp,Linux,Bash,Scp,因此,我将从一个事实开始,即我对linux脚本编写还比较陌生,因此,如果我走错了方向,请告诉我。 我正在创建一个脚本,用于根据用户输入将日志从许多不同主机复制到本地计算机上 我正在编写的函数之一需要使用scp。每次在特定远程主机上使用scp命令时,都必须输入密码。因此,为了节省用户的时间,我想复制特定主机上用户想要的任何文件 我知道我可以用scp做到这一点user@Remoteipaddress:'directory/file1 directory/file2'本地/机器/目录 我让它运行(我觉

因此,我将从一个事实开始,即我对linux脚本编写还比较陌生,因此,如果我走错了方向,请告诉我。
我正在创建一个脚本,用于根据用户输入将日志从许多不同主机复制到本地计算机上

我正在编写的函数之一需要使用scp。每次在特定远程主机上使用scp命令时,都必须输入密码。因此,为了节省用户的时间,我想复制特定主机上用户想要的任何文件

我知道我可以用scp做到这一点user@Remoteipaddress:'directory/file1 directory/file2'本地/机器/目录

我让它运行(我觉得太多了,所以如果有更好的方法让我知道)一堆循环

带有scp命令的部分是我的主要问题。如果我引用并回显它,代码看起来很好。我甚至可以复制和粘贴回显的结果,它会工作,但如果我让脚本执行,我会收到bash:-c:line 0:unexpected EOF,同时查找匹配的`''

编辑:$app是在程序的另一部分中创建的静态数字 添加了一些似乎缺少的内容。我正试图将程序的多个领域整合在一起,而不会让它变得比现在更混乱

#assigns different remote host paths do array variable
until [ $scriptCounter == $app ]
do
    scpScript[$scriptCounter]="user@${ipAddress[$ipCounter]}:'"
    ((++ipCounter))
    ((++scriptCounter))
done

#$app value gets set by another function - typically 3 if that matters
scpCount=0
DayCounter=0
ipScriptCounter=0
until [ $Count == $app ]
do
    ((++scpCount))
    mkdir ~/MyDocuments/Logs/$3/app$scpCount
    echo "Creating ~/MyDocuments/Logs/${3}/app${scpCount}"

#there is one log for each day, $totalDiffDays is the total amount of days
#$DayCounter is set and gets marked up everytime it goes through loop until 
it matches total days
 until [ $DayCounter == $totalDiffDays ]
 do
    scpPath[$DayCounter]="/var/log/docker/theLog*${datePath[$DayCounter]}*"
    noSpaceSCP[$DayCounter]=${scpPath[$DayCounter]//[[:blank:]]/}
    ((++DayCounter))
 done
   fullSCPscript[$scpCount]="${scpScript[$ipScriptCounter]}${noSpaceSCP[*]}'"

   #this portion I have an issue with.
   scp ${fullSCPscript[$scpCount]} ~/MyDocuments/Logs/$3/app$scpCount

   #this ups the array counter for my ipaddress array
   ((++ipScriptCounter)) 

#How im zeroing out the $DayCounter so it will run through again for other 
nodes but with different IP address
until [ $DayCounter == "0" ]
do
    ((--DayCounter))
done
done
使用scp命令回显行时获得的示例输出

scp user@10.10.200.100:'/var/log/docker/theLog*2018-07-26* /var/log/docker/theLog*2018-07-27*' /home/mobaxterm/MyDocuments/Logs/care3/app1

很抱歉,这看起来很混乱,但总的来说,我正在尝试构建从中获取日志的目录,如果有多天,只需添加到scp命令中即可。我正在尝试这样做,而不是运行一个完整的单独命令,以避免用户在需要5个文件时输入5次密码。相反,他们只需输入一次。

您可以缩进您的代码以便于阅读吗?您不需要修改
Count
app
anywhere,因此您的第一个循环将不受限制地重复自己。。。另外,有些变量是不可寻址的,比如来自任何地方的
scpCount
totalDiffDays
。无论如何,如果你能发布一些你得到的输出,这将有助于更好地理解问题是什么。另外,你是否曾考虑过共享密钥以避免一遍又一遍地写密码?如果问题只在用户必须手动键入密码,你可以查看或继承密码来确定密码(如果你在明文中为这些系统存储可能的密码就很舒服)。。如果您经常通过ssh/scp连接到其他机器,那么您真的应该设置更少的密码。如果您要跨多台机器将文件更新为通用标准,您应该查看
rsync
,以便轻松高效。我现在将尝试格式化它,使其更具可读性。我将尝试回答一些未知变量,因为有些变量是在单独的函数中生成的。在安全方面工作,不能用纯文本存储密码。