我编写了一个 bash 脚本,可以从远程集群中的不同目录下载几部电影。我的问题是 bash 文件询问我在远程集群中下载“每部”电影的密码。
我想知道是否有一种方法只需输入一次密码即可下载所有电影。如果有人可以提供帮助,我真的很感激。我的 bash 脚本是:
##! /bin/bash
direc1='foldername1 foldernameg foldername7 foldernames'
for AR in $direc1 ;do
movname="$AR".avi
for ART in $movname ;do
DatFile1="$AR"
DatFile2="$ART"
echo "#######################--NEW--####--DOWNLOAD--###############################"
scp -p -r cluster/directory/$DatFile1/$DatFile2 /home/folder3
done
done
输出是这样的:
#######################--NEW--####--DOWNLOAD--###############################
your password:
foldername1.avi 100% 7580KB 1.5MB/s 00:04
#######################--NEW--####--DOWNLOAD--###############################
your password:
foldernameg.avi 100% 7580KB 1.1MB/s 00:02
#######################--NEW--####--DOWNLOAD--###############################
your password:
foldername7.avi 100% 7580KB 1.7MB/s 00:05
#######################--NEW--####--DOWNLOAD--###############################
your password:
foldernames.avi 100% 7580KB 1.9MB/s 00:07
在上面的输出中,当出现消息“您的密码:”时,我需要输入密码才能下载每部电影。
答案1
scp
使用ssh
.因此,只要你在配置中启用了 ssh 公钥登录sshd
,并且你的ssh
公钥没有密码,并且你的公钥已添加到授权密钥中,那么你就可scp
以免密码使用。
- 在您的客户端(即运行 scp 脚本的位置)上生成 ssh 密钥。将密码留空以进行无密码登录。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/stew/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/stew/.ssh/id_rsa
Your public key has been saved in /home/stew/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:CB8ztwpXrT7lWQj/3W+8IAoHwqTelEBva9/aA7u2w3w stew@stewbian
The key's randomart image is:
+---[RSA 3072]----+
| . |
| . . . |
| ..++ + . |
| *ooB = . |
| ..B+.S + . |
| . +oo+oo + . . |
| . .+o=oo......|
| *=E. . . +|
| .+=o. oo|
+----[SHA256]-----+
$
- 确保 ssh 服务器(远程计算机)接受公钥
$ cat /etc/ssh/sshd_config | grep PubkeyAuthentication
#PubkeyAuthentication yes
如果显示PubkeyAuthentication no
,则更改文件并systemctl restart sshd
.
- 将您的公钥添加到
~/.ssh/authorized_keys
远程服务器的。这可以ssh-copy-id <user>@<server>
通过手动将我们在步骤 1 中制作的内容~/.ssh/id_rsa.pub
从本地计算机附加到~/.ssh/authorized_keys
服务器来完成。
答案2
基于密钥的身份验证是最好的方法。如果远端没有配置的话,这种问题是什么预计用于:
#!/usr/bin/env expect
set timeout -1
# enter your password once
stty -echo
send_user -- "Enter your password for the cluster: "
expect_user -re "(.*)\n"
send_user "\n"
stty echo
set pass $expect_out(1,string)
set folders {
foldername1
foldernameg
foldername7
foldernames
}
foreach f $folders
spawn scp -p -r cluster/directory/$f/$f.avi /home/folder3
expect {
"your password:" { send "$pass\r"; exp_continue }
eof
}
}