리눅스
내 Linux 시스템에서는 시스템을 부팅할 때마다 개인 SSH 키의 암호를 해독합니다. 부팅되면 터미널을 열고 다음을 실행합니다.
ssh-add ~/.ssh/id_rsa_some_key
git clone <git-url>
와 같은 git 작업을 수행할 준비가 되었습니다 git pull -a
. 다른 터미널을 열고 해당 명령을 다시 실행하면 암호화된 SSH 키의 비밀번호를 입력하라는 메시지가 팝업되지 않습니다. 요약하자면, 내 Linux 시스템에서는 비밀번호를 한 번만 입력하면 됩니다.
윈도우
내 작업에는 Windows 시스템이 있습니다. 부팅되면 열립니다.git-bash그리고 발행:
eval $(ssh-agent)
그리고 ssh-add ~/.ssh/private_key
비밀번호를 입력하고 git 저장소와 통신할 수 있는 git 명령을 실행하세요. 내 Linux 시스템과 달리 새 git-bash를 열고 git 명령을 실행하면 비밀번호를 입력하라는 메시지가 나타납니다. 요약하자면, git-bash 터미널에서 개인 키를 복호화하면 git 저장소와 상호 작용할 수 있지만 새 터미널이 열리면 ssh-key를 다시 복호화해야 합니다.
나는 무엇을 시도 했는가?
미인대회를 이용하려고 했는데요. 첫 번째 문제는 id_rsa가 적합하지 않다는 것입니다. puttygen을 사용하여 새 키를 생성해야 했지만 git@으로 시작하는 ssh git url을 사용할 수 없다는 것이 밝혀졌습니다. https URL로 바꿔야 했는데, 그건 제가 원하는 것이 아닙니다.
나는 어떤 대답을 선호하는가
나는 다음 기준을 충족하는 답변을 선호합니다.
- SSH 키는 Windows 시스템이 부팅되고 git 작업을 수행하기 위해 터미널이 열릴 때 한 번 해독되어야 합니다.
- 새 터미널이 열리면 계속해서 git 저장소와 상호 작용할 수 있습니다. 즉, 비밀번호를 입력하라는 메시지가 팝업되지 않습니다.
- 나는 git-bash에 전념하지 않습니다. 처음 두 기준과 일치하는 다른 터미널이 Windows에 있으면 괜찮습니다.
답변1
명령
eval $(ssh-agent)
SSH 에이전트 프로세스(Pageant와 동일)를 시작하고 일반적으로 SSH_AUTH_SOCK 및 SSH_AGENT_PID라는 두 가지 환경 변수를 생성합니다(적어도 Linux에서는 Windows git-bash가 여기서 차이를 만드는지 알 수 없습니다. 아마도 그렇지 않을 것입니다).
SSH_AUTH_SOCK 변수가 설정되어 있고 유효한 인증 에이전트 소켓을 가리키는 경우 변수를 읽을 수 있는 모든 프로세스에서 이를 사용할 수 있습니다. 따라서 이 변수의 값을 한 git-bash 세션에서 다른 세션으로 전파하는 방법이 필요합니다. SSH_AGENT_PID 변수는 필요한 경우 에이전트를 쉽게 종료할 수 있도록 하는 편의를 위한 것입니다.
해당 환경 변수(또는 SSH_AUTH_SOCK만)를 파일에 저장하여 후속 git-bash 창에서 읽을 수 있는 경우 다음과 같이 스크립팅할 수 있습니다.
새로운 git-bash가 시작될 때마다(즉, 스크립트 .bashrc
또는 그에 상응하는 git-bash를 사용하여)
- SSH 에이전트 환경 변수 파일이 있는지 확인하십시오.
- 파일이 존재하는 경우:
- 읽어
- 파일에 나열된 에이전트 소켓(및 선택적으로 프로세스)이 여전히 존재하는 경우 현재 세션에서 변수를 있는 그대로 사용합니다.
- 그렇지 않은 경우(즉, 파일이 없거나 해당 정보가 오래된 경우):
- 달리다
eval $(ssh-agent)
- 새 SSH 에이전트 환경 변수 파일을 만듭니다.
- 달리다
- 완료!
또한 SSH git URL을 전체 형식으로 입력해야 할 수도 있습니다. 즉, 그냥 대신 [email protected]/project.git
다음과 같이 입력해야 합니다.
ssh://[email protected]/project.git
기술적으로 접두사가 없는 형식은 ssh://
명령줄에 입력하는 것이 더 편리한 단축어일 뿐입니다.