소프트웨어의 특정 부분을 구축하는 원격 서버가 있습니다. 빌드 프로세스의 일부에서는 프라이빗 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 <<EOF
vs가 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
(검증되지 않은)