우분투 서버 시스템에 openSSH 서버를 설정하고 공개/개인 키(비밀번호 없음)를 사용하도록 구성했습니다. 클라이언트가 서버에 접속할 때 비밀번호와 키 확인을 요구하고 싶어서 그 비밀번호를 이용해 개인키를 생성했습니다. 문제는 클라이언트가 서버에 처음 연결을 시도할 때만 비밀번호가 필요하며, 동일한 클라이언트로부터의 후속 연결은 비밀번호를 다시 묻지 않고 자동으로 연결된다는 것입니다. 한 가지 예외는 클라이언트 컴퓨터가 다시 시작되는 경우이지만 이는 내가 원하는 것이 아닙니다.
나는 클라이언트 컴퓨터에 대한 모든 권한을 가지고 있으므로 클라이언트 컴퓨터에서 SSH 에이전트의 모든 ID를 제거하는 "ssh-add -D" 명령을 사용하여 cron 작업을 추가하기로 결정했습니다. 이는 클라이언트가 다음에 시도할 때를 의미합니다. 연결하면 처음과 마찬가지로 비밀번호를 입력하라는 메시지가 표시됩니다. 매시간 실행되도록 cron 작업에 이 명령을 추가했습니다(연결을 시도할 때마다 비밀번호를 요구하지 않아도 만족스럽습니다).
불행하게도 작업이 실행될 때 아무 작업도 수행하지 않는 것 같습니다. 작업이 실제로 실행되었는지 확인하고 더 많은 명령을 추가했습니다. 모든 명령이 예상대로 작동했지만 ssh-add만 제대로 작동하지 않는 것 같았습니다.
다음 줄을 사용하여 크론 작업을 추가했습니다.
user@ubuntu:~$ crontab -u user -e
그런 다음 편집을 위해 vim을 선택하고 다음 줄을 추가했습니다.
* * * * * ssh-add -D
저장되었습니다.
내가 뭘 잘못했나요?
참고: 저는 Linux(우분투 사용)를 처음 접했기 때문에 일부 고급 개념을 이해하지 못할 수도 있습니다. 간단하게 답변해주시면 감사하겠습니다 :)
답변1
일반적으로 프로그램이 cron에서 실행되면 환경 변수가 다르기 때문에 ssh-add
ssh-agent를 찾을 수 없습니다.
대신 다음 스크립트를 호출하여 모든 프록시를 시도하고 $SSH_AUTH_SOCK
올바르게 설정하십시오.
#!/bin/sh
for agent in /tmp/ssh-*/agent.*; do
export SSH_AUTH_SOCK=$agent
if ssh-add -l 2>&1 > /dev/null; then
# working ssh-agent found
ssh-add -D # delete all identities
fi
done
답변2
아마도 추가하면 충분할 것입니다.
AddKeysToAgent yes
고객에게 .ssh/config
?
답변3
Joefer의 답변과 Jill의 의견으로 인해 이 작업을 수행하게 되었습니다.
echo $SSH_AUTH_SOCK
명령줄에서는 다음과 같이 표시됩니다.
/run/user/1000/keyring/ssh
따라서 crontab에서 실행할 때 이것은 나에게 효과적입니다.
export SSH_AUTH_SOCK=/run/user/1000/keyring/ssh && ssh-add -D