내 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 -l
ID가 없으면 코드 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를 사용하는 다른 명령과 마찬가지로 단순히 프록시를 사용하여 원격 연결에 필요한 키를 얻습니다.