Bash scp多个文件密码问题

3

我正在尝试使用scp在Bash中将多个文件从远程服务器复制到本地驱动器。 以下是代码的一部分:

scp -r -q $USR@$IP:/home/file1.txt $PWD
scp -r -q $USR@$IP:/home/file2.txt $PWD
scp -r -q $USR@$IP:/root/file3.txt $PWD

然而,问题在于每次想要复制文件时,它都会要求输入服务器的密码,这个密码是相同的。我希望只需输入一次密码,就可以复制所有文件。
请不要建议使用rsync或创建密钥认证文件,因为我不想这样做。 还有其他方法吗? 非常感谢您的帮助。

怎么样:scp -r -q $USR@$IP:/home/file*.txt $PWD - michael501
1
@michael,并不是所有的文件都在/home目录下,如果你看到第三个文件在/root目录下。 - Matt
1
@NickC 你是什么意思? - Matt
@Matin SSH密钥适用于大多数用户。您说:“我不想这样做”。为什么?这是问题的重要信息。 - Nicole
@NickC 嗯,我已经研究了关于密钥的内容,但是我还没有找到任何解释得很好的地方(我是初学者)。所以我想我会使用我正在使用的东西,因为IP、USR和密码都是用户定义的。 - Matt
显示剩余4条评论
3个回答

1
你可以使用expect脚本或sshpasssshpass -p 'password' scp ...
#!/usr/bin/expect -f
spawn scp ...
expect "password:"
send "ur_password"

一个缺点是你的密码现在以明文形式存在。

1
谢谢您的回答。但是这个脚本是用于工作的,我不认为他们安装了"expect"或者"sshpass"。Bash不识别expect和spawn。而且这个脚本将在不同的地方运行,所以我不能在我的Linux上安装它。 - Matt
spawn 是一个 expect 命令,你可以安装/编译一次 (expect/sshpass),然后将二进制文件与脚本一起复制。 - w00d
1
你能否请重新表述一下? - Matt
你需要下载expect/sshpass源代码,在自己的机器上编译,然后将二进制文件和脚本一起复制以使用它。 - w00d

0

我假设如果您可以从远程服务器使用scp命令传输文件,那么您也可以通过ssh登录并创建远程文件的tarball。

-r标志是递归的,用于复制整个目录,但您在命令中列出了不同的文件,因此-r变得多余。

请尝试从远程系统的bash shell中运行以下命令:

$ mkdir /home/file_mover
$ cp /home/file1.txt /home/file_mover/
$ cp /home/file2.txt /home/file_mover/
$ cp /root/file3.txt /home/file_mover/

$ tar -cvf /home/myTarball.tar /home/file_mover/

$ scp -q $USR@$IP:/home/myTarball.tar  $PWD                

1
感谢您的帮助,但我无法在远程服务器上创建文件或文件夹。我只能读取。 - Matt

0
嗯,在这个特定情况下,你可以这样写...
scp -q $USR@$IP:/home/file[1-3].txt $PWD

谢谢,但是如果你注意一下,其中一个文件不在主目录中。而且并不是所有的文件都在同一个路径下。 - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接