ssh-agent 및 ssh-add가 원격 서버에서 작동하도록 할 수 없습니다

ssh-agent 및 ssh-add가 원격 서버에서 작동하도록 할 수 없습니다

소프트웨어의 특정 부분을 구축하는 원격 서버가 있습니다. 빌드 프로세스의 일부에서는 프라이빗 bitbucket 저장소에 대한 액세스가 필요합니다.

eval $(ssh-agent)일반적으로 내 로컬 컴퓨터에서 git이 ssh를 사용하여 bitbucket에 연결하고 ssh 에이전트를 시작 하고 git을 사용하여 ssh-add필요한 키를 추가하도록 .gitconfig를 설정하면 제대로 작동합니다.

원격 서버에서 작동하도록 할 수 없습니다.
내가 시도하는 방법은 원격 서버에 연결하고 다음과 같은 스크립트를 실행하는 것입니다.

  ssh -i"${BUILDHOSTKEY}" "${BUILDHOSTUSERNAME}"@"${BUILDHOSTNAME}" << EOF
     eval $(ssh-agent)
     ssh-add ~/route/to/key
     ... rest of build script ...
     
  EOF

시도하면 에이전트가 에이전트 pid로 시작되었지만 ssh-add다음 오류와 함께 실패한다는 출력이 표시됩니다. 에이전트에 연결하는 동안 오류가 발생했습니다. 해당 파일 또는 디렉터리가 없습니다. 이는 프록시 소켓에 액세스할 수 없음을 나타냅니다(제가 올바르게 이해한 경우).

여기서 무슨 문제가 있습니까? 저는 이런 종류의 설정을 처음 접하므로 기본 사항까지 주저하지 말고 설명하십시오.

답변1

짧은 답변:리모컨에 키가 있는데 체크 표시를 잊어버렸거나 'EOF' , 로케일에 키가 있지만 이것이 키를 리모컨으로 전송하는 방법이기를 바라지 않을 수도 있습니다. 두 번째 경우에는 scp -p키를 리모컨으로 전송하거나 다른 보안 수단(예:외딴bitbucket에 대한 공개 ID 키(생성했다고 가정)

긴 답변:

입력하고 ssh-agent여기에 무슨 일이 일어나고 있는지 확인하십시오.

(또는

cat  << EOF
     echo Would do remotely   eval $(ssh-agent)
     echo Would do remotely   ssh-add ~/route/to/key
     echo -------------
EOF

또는

ssh -i"${BUILDHOSTKEY}" "${BUILDHOSTUSERNAME}"@"${BUILDHOSTNAME}" << EOF
     echo WOULD DO   eval $(ssh-agent)
     echo WOULD DO   ssh-add ~/route/to/key
EOF

제가 쓸데없는 말도 안 되는 말을 하고 있다고 느끼신다면. )

출력에는 다음과 같은 내용이 포함됩니다.

SSH_AUTH_SOCK=/tmp/ssh-XXXXXXEEUQSV/agent.43806

이는 로컬 컴퓨터에 있는 ssh-agent의 Unix 도메인 소켓 주소입니다. 이는 귀하의 컴퓨터에 로컬이며 원격 컴퓨터에는 존재하지 않습니다(희망합니다!).

해당 소켓 파일은 두 시스템 모두에 존재하지 않습니다. 어쩌면 당신은 글을 쓰고 싶을 수도 있습니다

#  Note  ' ' on the following line -----------------here-------------\--\
ssh -i"${BUILDHOSTKEY}" "${BUILDHOSTUSERNAME}"@"${BUILDHOSTNAME}" << 'EOF'
     eval $(ssh-agent)
     ssh-add ~/route/to/key
     ... rest of build script ...
EOF

~/route/to/key원격 컴퓨터에서 작동하는 경우 .

논평. 자신이 무엇을 하고 있는지 알고 있다면 다음과 같은 것을 시도해 볼 수도 있습니다.ssh-agent bash -c 'ssh-add ~/route/to/key; ssh -A -i"${BUILDHOSTKEY}" "${BUILDHOSTUSERNAME}"@"${BUILDHOSTNAME}"'

고쳐 쓰다: 댓글은 cat <<EOFvs가 cat <<'EOF'문제를 부분적으로 해결함을 나타냅니다. 사람들은 임시 파일을 생성하여 더 많은 제어권을 얻을 수 있습니다

echo 'echo This will expanded on remote: $VAR $(hostname; ls file) ' > file.$$
echo "echo This will be expanded locally: $VAR $(hostname; ls -l file) ' >> file.SS
echo "ls -l /dir/file # This list the remote file anyway " >> file.$$
ssh ....  < file.$$

또는 백슬래시 이스케이프를 사용할 수 있습니다.

ssh ....  <<EOF
echo This will expanded on remote: \$VAR \$(hostname; ls file)
echo This will be expanded locally: $VAR $(hostname; ls file)
ls -l /dir/file # This list the remote file anyway
EOF

(검증되지 않은)

관련 정보