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
    }
}

관련 정보