Windows에서 Git Bash를 시작할 때 SSH 에이전트 실행


152

git bash를 사용하고 있습니다. 나는 사용해야한다

eval `ssh-agent.exe`
ssh-add /my/ssh/location/

새로운 git bash를 시작할 때마다.

ssh 에이전트를 영구적으로 설정하는 방법이 있습니까? 아니면 창에 ssh 키를 관리하는 좋은 방법이 있습니까?

나는 새로운 사람입니다, 제발 자세한 자습서를 해주세요, 감사합니다!


3
되어 /my/ssh/location/같은 것으로 equalivent /c/Users/Foobar/.ssh/?
Nick

비슷한 문제가 superuser.com/q/1238486/478378 에 게시되어 현재 해결되었습니다. 다음 요지에는 모든 세부 정보 gist.github.com/jiggneshhgohel/afe96f0d57bdbf8beba305a73905402d 가 포함되어 있습니다 . 감사.
Jignesh Gohel

답변:


138

자식 강타 세션에서, 당신은에 스크립트를 추가 할 수 있습니다 ~/.profile또는 ~/.bashrc( ~일반적으로 설정되어%USERPROFILE% 출시 말했다 세션의 순서를 자동을) ssh-agent. 파일이 존재하지 않으면 작성하십시오.

이것이 바로 " SSH 키 비밀번호 문구 작업 "에서 GitHub가 설명한 것입니다 .

이 기사의 " Git for Windows에서 ssh-agent 자동 실행 "섹션에는 에이전트가 실행 중인지 여부를 확인하는 강력한 스크립트가 있습니다. 아래는 스 니펫입니다. 전체 솔루션은 GitHub 기사를 참조하십시오.

# This is just a snippet. See the article above.
if ! agent_is_running; then
    agent_start
    ssh-add
elif ! agent_has_keys; then
    ssh-add
fi

기타 자료 :

" ssh-agent가 git run with windows command shell에서 작동하도록하기 "는 비슷한 스크립트를 가지고 있지만, 더 강력하고 최신 인 위의 GitHub 기사를 주로 참조 할 것입니다.


내가 가진 약간의 성가심은 내가 git을 사용하지 않을 것이라는 것을 알면 ssh 키 암호 문구에 입력하지 않을 것이고, 내가 열었던 모든 쉘이 다시 요청했습니다. 이것은 상태 1, 에이전트없이 키없이 실행되므로이 ​​섹션에서 ssh-add를 제거 할 수 있습니다. 비밀번호 문구를 처음 입력하지 않으면 ssh-add를 수동으로 실행할 때까지 다시 묻지 않습니다.
Andy2K11

@Gordon 해당 help.github.com/articles/working-with-ssh-key-passphrases GitHub 링크 의 어느 부분 이 변경 되었습니까? 그 내용은 여전히 ​​존재하며 여전히이 답변과 관련이있는 것 같습니다.
VonC

1
@ Andy2K11 셸을 열 때가 아니라 처음에 암호를 입력하려면 언급 한 것처럼 .bash_profile에서 ssh-add를 제거하고 "AddKeysToAgent yes"를 추가하는 것이 가장 깨끗한 방법입니다. .ssh / config 파일 (이 답변 참조 : superuser.com/a/1114257/523133 ). 이렇게하면 ssh-add 실행을 기억하지 않아도됩니다.
hardsetting

30

추신 :이 지침은 Windows 10 Linux Subsystem에서 열린 Bash 셸과 관련이 있으며 Windows에서 Ubuntu의 Bash를 사용하여 Windows에서 생성 된 sym-linking SSH 키에 대해서는 언급하지 않습니다

1) 다음을 추가 하여 .bashrc 를 업데이트하십시오 .

# Set up ssh-agent
SSH_ENV="$HOME/.ssh/environment"

function start_agent {
    echo "Initializing new SSH agent..."
    touch $SSH_ENV
    chmod 600 "${SSH_ENV}"
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' >> "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}

# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
    . "${SSH_ENV}" > /dev/null
    kill -0 $SSH_AGENT_PID 2>/dev/null || {
        start_agent
    }
else
    start_agent
fi

2) 그런 다음 실행 $ source ~/.bashrc하여 구성을 다시로드하십시오.

위의 단계는 https://github.com/abergs/ubuntuonwindows#2-start-an-bash-ssh-agent-on-launch 에서 가져 왔습니다.

3) SSH 구성 파일이 없으면 작성하십시오. 새 명령을 작성하려면 다음 명령을 사용하십시오..ssh$ touch config

4) 다음에 추가 ~/.ssh/config

Host github.com-<YOUR_GITHUB_USERNAME> 
HostName github.com
User git
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes


Host csexperimental.abc.com
IdentityFile ~/.ssh/id_work_gmail # path to your private key
AddKeysToAgent yes

<More hosts and github configs can be added in similar manner mentioned above>

5) command를 사용하여 SSH 에이전트에 키를 추가 $ ssh-add ~/.ssh/id_work_gmail하면 ssh를 사용하여 github 계정 또는 원격 호스트에 연결할 수 있어야합니다. 예를 들어 위의 코드 예제와 관련하여 :

$ ssh github.com-<YOUR_GITHUB_USERNAME>

또는

$ ssh <USER>@csexperimental.abc.com

SSH 에이전트에이 키 추가는 한 번만 수행해야합니다.

6) 이제 Windows Linux Subsystem에서 Bash 세션에서 로그 아웃하십시오. 즉, 모든 Bash 콘솔을 다시 종료하고 새 콘솔을 다시 시작한 다음 SSH 구성 파일에 구성된대로 Github 호스트 또는 다른 호스트에 SSH를 시도하십시오. 단계.

노트 :

감사.


1
WSL을 사용하는 흥미로운 대안. +1
VonC

@JigneshGohel 감사합니다.이 스크립트는 완벽하고 깨끗합니다. 그래도 궁금했는데 왜 그래 >> "${SSH_ENV}"? 그냥 안 > "${SSH_ENV}"그래? 물론 당신의 작품이지만 ~/.ssh/environment, (현재 생각하는 것처럼!?) 이유가 없기 때문에 천천히 길고 더 긴 파일로 끝납니다 ... 많은, 많은 감사합니다! 이 스크립트는 .bashrcWSL Ubuntu 의 기본값 에 포함되어야한다고 생각 합니다. 매우 유용합니다!
MikeBeaton

5

이것을 달성하는 가장 부드러운 방법은 Pageant를 SSH 에이전트 및 plink로 사용하는 것입니다.

원격에서 사용되는 호스트 이름에 대해 퍼티 세션을 구성해야합니다.

또한 putty와 같은 사이트에서 다운로드 할 수있는 plink.exe가 필요합니다.

그리고 키를로드 한 상태로 실행중인 Pageant가 필요합니다. 로그인 할 때 SSH 키를로드하는 시작 폴더에 미인에 대한 바로 가기가 있습니다.

git-scm을 설치할 때 OpenSSH 대신 거북이 / plink를 사용하도록 지정할 수 있습니다.

결과적으로 암호문에 도전하지 않고 git-bash를 열고 푸시 / 풀을 할 수 있습니다.

미인 대회에 키가로드되면 퍼티 및 WinSCP 세션에도 동일하게 적용됩니다. 그것은 인생을 훨씬 더 쉽고 안전하게 만듭니다.


2

해결 방법으로 Windows에서 퍼티를 사용하는 것을 좋아하지 않기 때문에 매우 간단한 유틸리티 ssh-agent-wrapper를 만들었습니다 . .ssh 폴더를 스캔하고 모든 키를 에이전트에 추가합니다. 작동하려면 Windows 시작 폴더에 넣으면됩니다.

가정 :

  • 경로의 ssh 에이전트
  • 경로에 shh-add (git를 설치할 때 "RED"옵션을 선택하여)
  • 개인 키는 % USERPROFILE % /. ssh 폴더에 있습니다.
  • 개인 키 이름은 id로 시작합니다 (예 : id_rsa)

좋은! +1. 나는 항상 퍼티가 아닌 openssh로 작업하므로 암호가있는 개인 키에 대한 흥미로운 솔루션입니다.
VonC

github에서 이미 소스를 git 저장소로 만드십시오.
Thorbjørn Ravn Andersen

경로에서 / releases를 제거하십시오. ;-)
Erez A. Korn

1

나는 이것이 PC 멍청한 놈이며 명백한 것을 놓치고 있기 때문에 최선의 대답을 기반으로 작동하도록 할 수 없었습니다. 그러나 FYI는 저와 같은 누군가에게 도움이되는 경우를 대비하여 마지막으로 작동 한 것은 여기 링크 중 하나를 통해 이루어 졌습니다 (답변에서 참조). 이것은 단순히 다음을 내 것에 붙여 넣는 것과 관련이 있습니다 .bash_profile.

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

아마도 이상한 것으로 구성되었지만 my .profile또는에 추가했을 때 성공하지 못했습니다 .bashrc. 내가 겪었던 또 다른 실제 과제는이 컴퓨터의 관리자가 아니며 IT의 승인을받지 않고 환경 변수를 변경할 수 없으므로 액세스 할 수없는 사람들을위한 솔루션입니다.

git bash를 열 때 ssh 비밀번호를 묻는 메시지가 표시되면 작동한다는 것을 알고 있습니다. 할렐루야가 마침내 효과가있었습니다.


1

이것을 ~ / .bashrc (또는 그 소스 파일)에 넣으면 쉘마다 불필요하게 여러 번 실행되는 것을 막을 수 있습니다.

if [ -z "$SSH_AGENT_PID" ]; then
        eval `ssh-agent -s`
fi

그런 다음 ~ / .ssh / config에 "AddKeysToAgent yes"를 추가하십시오.

Host *
    AddKeysToAgent yes

일반적으로 서버에 ssh (또는 git pull)를 사용하면 세션 당 한 번만 암호 / 암호를 묻는 메시지가 표시됩니다.


0

~ 디렉토리에 새 .bashrc 파일을 만듭니다 .

bash를 시작할 때마다 실행할 명령을 넣을 수 있습니다.


작동해야합니다. Git Bash를 실행할 때 .bashrc파일 echo test이로드되어 있는지 확인하고 같은 파일에 간단한 것을 넣으십시오 .
David Ferenczy Rogožan

또한 PowerShell의 ~는 설치된 버전과 지정된 사용자 옵션에 따라 Git Bash / Cygwin의 ~와 다를 수 있습니다.
dragon788

@Yar Windows에서는 .bashrc사용자 폴더 (예 :)에 넣 습니다 C:\Users\john.
Martin van Driel

0

간단한 두 개의 문자열 솔루션 에서 이 답변 :

들어 , bash는 등 :

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

대한 CSH , tcsh의 등 :

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.