스크립트 실행 중에 SSH 키 비밀번호에 대한 프롬프트를 호출하려면 어떻게 해야 합니까?

스크립트 실행 중에 SSH 키 비밀번호에 대한 프롬프트를 호출하려면 어떻게 해야 합니까?

내 ssh_config 파일에는 동일한 서버의 사이트에 대한 여러 항목이 있습니다. 예를 들면 다음과 같습니다.

Host site1
     HostName 123.1.1.1
     User myuser
     Port 13245
     GSSAPIAuthentication no
     IdentityFile /home/myuser/.ssh/id_dsa

Host site2...

비밀번호로 보호된 키를 사용하여 원격 서버에 로그인했는데 잘 작동합니다. 그러나 rsync를 사용하여 파일을 동기화하는 일부 bash 스크립트를 만들려고 하고 있으며 스크립트에서 비밀번호를 묻는 메시지를 표시한 다음 rsync 명령을 실행하고 싶습니다. ssh-agent를 사용하고 싶은 것 같은데 알아내는 데 어려움을 겪고 있습니다. 비슷한거 찾고있는데...

HOST="site1:"
SRC=/var/foo
DEST=/home/bar
SYNC=(rsync "$SRC" "$HOST""$DEST"...)# rsync /var/foo site1:/home/bar...

read -r -p "Are you sure? [y/N] " response
response=${response,,}
if [[ $response =~ ^(yes|y)$ ]]
then
    #check to see if the passphrase exists from prior execution of this script.
    if [ no ];then
        #use ssh-add to prompt for passphrase
        ssh-add #? ;
        #then execute rsync command
        "${SYNC[@]}"
    else
        #execute rsync command
        "${SYNC[@]}"
    fi
else
    echo "Operation aborted!"
fi

내가 찾을 수 있는 유일한 예는 .bashrc 또는 .profile에 코드를 배치하는 것이었습니다. 이 경우 쉘을 시작할 때마다 비밀번호를 입력하거나 비밀번호를 저장하기 위한 예상 파일을 생성해야 하는데 두 가지 모두 원하지 않습니다. 하다. 내 예에 표시된 대로 호스트를 전환하고 스크립트를 다시 실행할 수 있도록 rsync 스크립트를 시작할 때 비밀번호를 한 번만 묻는 메시지를 표시하려면 어떻게 해야 합니까?

답변1

ssh-agent먼저 실행 중인지 확인하고 그렇지 않으면 시작할 수 있습니다.

if ! [ -n "$SSH_AUTH_SOCK" ] || 
  ! { ssh-add -l &>/dev/null; rc=$?; [ "$rc" -eq 0 ] || [ "$rc" -eq 1 ];}; then
    echo "Starting agent..."
    eval "$(ssh-agent -s)"
fi

ssh-add -lID가 없으면 코드 1로 종료하고, 연결할 수 없으면 코드 2로 종료합니다 ssh-agent.

그런 다음 원하는 키의 비밀번호를 추가하세요.

ssh-add ~/path/to/keyfile

답변2

아이디어 ssh-agent는 모든 키를 저장하는 실행 중인 서비스를 갖는 것입니다. 따라서 비밀번호를 한 번만 입력하면 되며 원격 호스트에서 두 번째 호스트에 로그인하려는 경우 에이전트를 원격 호스트로 전달할 수도 있습니다.

먼저 ssh-agent를 사용하여 실행 중인지 확인하세요 ssh-add -l. 이는 "에이전트에 ID가 없음"을 의미할 수 있습니다.

ssh-add둘째, 또는 라고 말하여 에이전트에 키를 추가할 수 있습니다 ssh-add path/to/key/file.

그 후 rsync는 ssh를 사용하는 다른 명령과 마찬가지로 단순히 프록시를 사용하여 원격 연결에 필요한 키를 얻습니다.

관련 정보