SSH를 통해 내 서버에 로그인하면 SSH를 통해 git(개인 저장소)을 사용할 수 있습니다.
user@local:~$ ssh example.com
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 2.6.32-042stab083.2 i686)
* Documentation: https://help.ubuntu.com/
Last login: Thu Oct 30 10:46:22 2014 from 123.123.123.123
user@remote:~$ cd ~/path/to/project/
user@remote:~/path/to/project$ git pull
Enter passphrase for key '/home/user/.ssh/id_rsa':
Already up-to-date.
user@remote:~/path/to/project$ ps -aux | grep ssh-agent
user 450 0.0 0.0 4396 832 pts/4 S+ 10:57 0:00 grep ssh-agent
user 32680 0.0 0.0 4168 696 ? Ss 10:50 0:00 ssh-agent
user@remote:~/path/to/project$
ssh-add
하지만 별도의 세션에서도 ssh-agent를 사용하여 키를 추가했기 때문에 비밀번호를 입력해야 한다는 점에 유의하세요 . ssh-agent는 위와 같이 계속 실행 중입니다. 비밀번호를 다시 입력하지 않고도 SSH 키를 사용할 수 있을 것이라고 생각했습니다. 내가 틀렸어.
내가 사용하는 배포 스크립트에는 저장소 복제 또는 가져오기(프로젝트에 따라 다름)가 포함되므로 CI 서버에서 다음과 같이 실행합니다.
ssh [email protected] '~/path/to/deployment/script.sh'
결과적으로 "권한이 거부되었습니다(공개 키)"라는 메시지가 나타납니다. 키를 잠금 해제하려면 비밀번호가 필요하지만 비밀번호가 제공되지 않았기 때문에 오류가 발생했습니다.
비밀번호 없이 SSH 키를 만드는 것 외에 이 문제를 해결할 수 있는 다른 방법이 있나요?
답변1
ssh-agent
에 연결하려면 ssh
클라이언트(또는 다른 프로세스)가 연결 방법을 알아야 합니다. 이 정보는 ssh-agent
시작 시 쉘 명령으로 발행됩니다. 일반적으로 다음과 같습니다.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-H8yPWdYCNFmT/agent.506989; export SSH_AUTH_SOCK;
SSH_AGENT_PID=506990; export SSH_AGENT_PID;
echo Agent pid 506990;
생성 애플리케이션은 일반적으로 이러한 명령을 평가하여 현재 프로세스 환경에 변수를 로드한 다음 모든 하위 프로세스에 전파합니다.
따라서 올바른 프로세스에 연결하려면 적절한 소켓을 찾아야 합니다 ssh-agent
(예, 한 명의 사용자라도 동시에 여러 에이전트를 실행할 수 있습니다). 이를 수행하는 방법에는 두 가지가 있습니다.
문제가 있는 에이전트의 PID를 확인하고 모든
/tmp/ssh-*
디렉터리에서 소켓을 검색합니다.최근 가장 낮은PID (ssh-agent
포크가 데몬이 되기 때문에 소켓 이름에 사용되는 PID는 실제 데몬의 PID보다 낮습니다.)문제의 에이전트를 생성한 프로그램이 여전히 실행 중인 경우(또는 그 하위 항목 중 하나가 실행 중인 경우) 해당 환경에서 정보를 추출할 수 있습니다.
$ strings /proc/<PID>/environ | grep SSH_
항상 어떤 소켓을 사용해야 하는지 알려 에이전트를 시작하세요.
$ ssh-agent -a /path/to/ssh_agent/socket
예를 들어 로컬 및 원격 컴퓨터에서 작업할 때에도 유용합니다. 이를 셸 초기화 스크립트에 직접 연결하고 데스크톱 환경에서 에이전트를 생성한 컴퓨터에 연결할 때 Just load에 액세스하기만 하면 됩니다. 모든 열쇠. 터미널 멀티플렉서 등을 사용하는 경우에도 마찬가지입니다.