SSH를 통해 로그인 시 ssh-agent 및 ssh-add를 실행하는 간단한 방법은 무엇입니까?

SSH를 통해 로그인 시 ssh-agent 및 ssh-add를 실행하는 간단한 방법은 무엇입니까?

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].

관련 정보