SSH를 통해 서버에 로그인할 때 다음 명령이 자동 실행되도록 하려고 합니다.
ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa
내 SSH 키에는 암호 문구가 있으며 로그인할 때마다 한 번씩 입력해도 괜찮습니다.
이것을 .bashrc 파일에 넣으려고 했지만 ssh-agent가 새로운 bash 세션을 시작한다고 생각합니다. .bashrc에 이 항목을 저장한 후 로그인하려고 하면 작동이 멈추고 'exit'를 입력해야 '키 잠금을 해제하려면 암호를 입력하세요' 프롬프트가 표시됩니다.
다른 제안이 있나요?
서버가 Ubuntu LTS를 실행 중입니다.
답변1
다음을 추가해 보세요.
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
이런 방식으로 ssh-agent
새 셸을 시작하지 않고 백그라운드에서 자체적으로 실행된 후 셸 명령을 실행하여 적절한 환경 변수를 설정합니다.
댓글에서 말했듯이 그럴 수도 있겠네요~ 아니다원격 호스트가 아닌 작업 중인 상자에서 에이전트를 실행하고 싶습니다.
ssh -A remote-host
로컬 SSH 에이전트의 서비스를 원격 호스트로 전달합니다.
보안상의 이유로 신뢰할 수 있는 사람이 운영하는 호스트에만 에이전트 전달을 사용해야 하지만 언제든지 전체 에이전트를 원격으로 실행하는 것보다 낫습니다.
답변2
또 다른 대안은 이것을 .bashrc에 추가하는 것입니다. 이는 Erik의 답변(단일 인스턴스 보장)과 동일한 이점을 갖지만 추가 패키지가 필요하지 않습니다.
# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
echo Starting SSH Agent
eval $(ssh-agent -s)
fi
1개 이상의 키가 로드되지 않은 경우 ssh-add가 실행되고 키 시간 초과가 1일로 설정됩니다.
ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
echo Adding keys...
ssh-add -t 1d
fi
답변3
한 가지 대안은 Funtoo를 사용하는 것입니다.열쇠고리. 그런 다음 bash 쉘에 다음 한 줄을 붙일 수 있습니다.
eval $(keychain --eval id_rsa)
이는 동일한 작업(ssh 에이전트 시작 등)을 수행하는 동시에 각 하위 쉘에 대해 ssh-agent 프로세스를 실행하지 않습니다. 대신 귀하가 소유하고 있는 "이미 실행 중인" 인스턴스를 찾아서 해당 인스턴스에 연결합니다.
답변4
또한 SSH 연결 유지 기능이 있는 경우 -A
적용되기 전에 기존 연결 파일을 삭제해야 한다는 점을 명심하세요. 에서 SSH 연결 파일을 삭제하세요 /tmp/[host]
.