通过 bash 文件输入密码

通过 bash 文件输入密码

我编写了一个 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以免密码使用。

  1. 在您的客户端(即运行 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]-----+
$
  1. 确保 ssh 服务器(远程计算机)接受公钥
$ cat /etc/ssh/sshd_config | grep PubkeyAuthentication
#PubkeyAuthentication yes

如果显示PubkeyAuthentication no,则更改文件并systemctl restart sshd.

  1. 将您的公钥添加到~/.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
    }
}

相关内容