Bitbucket으로 푸시 할 때마다 암호 문구를 피하는 방법


217

이 안내서 의 도움으로 ssh를 설정했으며 잘 작동했습니다 ( hg push암호를 묻지 않고 실행할 수 있음 ). 나는 여전히 동일한 홈 디렉토리를 사용하고 있다고 생각하면서 그때와 지금 사이에 일어날 수있는 일.

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...

답변:


337

ssh 에이전트를 사용해야합니다. 짧은 답변 : 시도

$ ssh-add

밀기 전에. 요청시 암호를 입력하십시오.

ssh 에이전트를 아직 실행하지 않은 경우 다음 메시지가 표시됩니다.

Could not open a connection to your authentication agent.

이 상황에서 하나를 시작하고 그에 따라 환경을 설정할 수 있습니다

eval $(ssh-agent)

그런 다음 ssh-add명령을 반복하십시오 .

ssh 에이전트 맨 페이지를 살펴볼 가치가 있습니다.


2
eval입력 할 수 있는 요점은 무엇입니까 ssh-agent?
James McMahon

4
사용할 수있는 명령이 표시되며 실행하지 않습니다. eval수행합니다.
tshepang 2019

원래 질문과 관련이 없지만 GitHub, Bitbucket 등에서 이러한 문제가 계속 발생하면 http가 아닌 git / ssh URL을 사용하고 있는지 확인하십시오.
Czechnology

기본 키가 없거나 여러 개를 추가하려는 경우ssh-add /path/to/key
hoosierEE

46

이 문제를 해결하는 방법은 다음 ssh-agentssh-add같습니다.

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

이 후 암호는 현재 세션에 저장됩니다. 다시 묻지 않습니다.


7
대부분의 사람들은 그들의 패스 프레이즈에 대해 전혀 버그를 갖고 싶어하지 않습니다.
connexo

26

ssh 키 관리를 위해 Keychain 을 사용 합니다. 데비안에서도 사용할 수 있으며 아마도 우분투에서

apt-get install keychain

데비안 키 체인 패키지 페이지 는 다음과 같습니다 . 보시다시피, 프로젝트는 활발하지 않지만 나를 위해 일합니다. 나는 또한 여기 에 또 다른 대답으로 이것에 대해 조금 언급했습니다.


2
//, 이것은 나를 위해 일했다. 터미널을 열 때마다 ssh 키 비밀번호를 입력 할 필요가 없기 때문에 ssh-agent보다 낫습니다 .
Nathan Basanese

@NathanBasane 키 체인을 사용하면 터미널을 열 때마다 ssh 키 비밀번호를 입력 할 필요가 없다고 말하는가? 어떻게 구성합니까? 키 체인은 터미널을 열 때마다 암호를 요구하기 때문에 부팅 후 처음 열 때만 암호를 요구하지만 여전히 그렇습니다. 매번 암호 문구를 입력하고 싶지 않습니다.
m4l490n

@ m4l490n 아니오, 키 체인을 사용하는 경우 터미널을 열 때마다 ssh 키 비밀번호를 입력 할 필요가 없습니다. 그러나 부팅 후 한 번 입력해야합니다. 암호는 디스크에 저장되지 않으므로 안전하지 않습니다.
Faheem Mitha

나를 위해, 그것은 로그인 할 때마다 묻습니다 (원격 서버에 git 저장소 + ssh 키가 있고 "git pull"을 할 때마다 암호 문구를 입력해야합니다)
Martin Thoma

@MartinThoma 그것은 잘못 보인다. .ssh를 올바르게 구성했는지 확인하십시오. 특히, 쉘이 올바르게 구성되어 있습니까? 여전히 작동하지 않고 알아낼 수없는 경우 질문을 할 수 있습니다.
Faheem Mitha

13

다음 ~ / .ssh / config 파일을 작성하십시오 (있는 경우 편집).

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

하지만 저는 모든 서비스에 대해 서로 다른 키 쌍을 사용하고 있습니다.
connexo

@connexo 와일드 카드 별표를 개별 호스트 이름으로 바꾸고 'id_rsa'를 해당 개인 키로 바꿀 수 있습니다
ness-EE

1
IgnoreUnknown AddKeysToAgent,UseKeychain바로 위에 추가해야했습니다 UseKeychain yes.
consideRatio

1
"UseKeychain yes"줄에 "잘못된 구성 옵션 : usekeychain"오류가 표시됩니다.
m4l490n

@ m4l490n : UseKeychain옵션이 OpenSSH 7.1p2 (2016-02-28)에 추가 된 것 같습니다 . 이전 버전이있을 수 있습니다. openssh.com/txt/release-7.2
chus

6

편의상 최적의 방법은 jmtdFaheem 의 답변을 조합 한 것입니다 .

ssh-agent단독으로 사용 한다는 것은 ssh-agent열 때마다 새로운 터미널마다 새로운 인스턴스를 생성해야 한다는 것을 의미합니다 . keychain초기화되면 개인 키의 암호를 묻고 저장합니다. 그렇게하면 개인 키는 비밀번호로 보호되지만 비밀번호를 반복해서 입력 할 필요는 없습니다.

아치 위키 에서 키 체인 초기화 권장 /etc/profile.d/과 같은, 또는 쉘 프로파일을 .bash_profile하거나 .bashrc. 이것은 터미널을 열 자마자 키 체인에 영향을 미친다는 단점이 있습니다.

보다 유연한 접근 방식은 keychain특정 tmux세션 과 결합 하는 것 입니다. 따라서 .bash_profile:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

... 그리고 tmux필요할 때 (키 바인드에서 시작된) 보안 세션 을 시작하는 경우입니다 .

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

이제 특정 tmux세션 을 시작할 때 키 체인이 한 번만 초기화됩니다 . 해당 세션이 지속되는 한 해당 ssh키 에 액세스 하여 원격 리포지토리로 푸시 할 수 있습니다.


원격 컴퓨터에서 어떻게 작동합니까? $ SSH_CLIENT를 확인하기 위해 두 번째 스크립트를 수정했으며 존재하는 경우 urxvtc를 실행하지 않고 tmux 만 실행하십시오. 작동하지만 문제는 .bash_profile 부분입니다. 처음 상자에 로그인하면 "tmux ls"의 출력 인 "서버를 찾을 수 없습니다 : 연결이 거부되었습니다"라고 표시됩니다. 그런 다음 두 번째 스크립트를 실행할 때 tmux는 새 세션을 시작하거나 기존 세션에 연결하지만 키 체인 프롬프트는 없습니다. 그런 다음 세션을 종료하면 키 체인 프롬프트가 기다리고 있습니다.
jonyamo

세션이없는 경우 tmux 출력을 침묵 시키도록 답변을 업데이트했습니다.
jasonwryan

고맙지 만 키 체인 문제는 여전히 해결되지 않았습니다. tmux는 새 세션을 생성하지만 빈 프롬프트로 바로 이동합니다. tmux 세션을 종료 할 때만 암호문을 요구하는 키 체인 프롬프트가 표시됩니다.
jonyamo

키 체인은 .bash_profile에서만 실행되므로 키 체인의 말을 중단해야한다고 생각합니다. 문제는 ssh-add를 실행하는 것입니다. tmux 세션을 만든 후 ssh-add를 수동으로 실행하면 작동합니다.
jonyamo

1
두 번째 스크립트를 건너 뛰고 보안 tmux 세션을 시작 .profile하면 로그인하자마자 키를 입력하라는 메시지가 표시됩니다.
jasonwryan

0

당신은 사용할 수 있습니다 sshpass:

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server

sshpass -p yourpassphrase일반적인 ssh명령 을 추가 하기 전에 추가해야합니다 .


2
정말 바보 같은 생각입니다. 셸 기록에 암호가 일반 텍스트로 표시되지 않습니까?
connexo

정확하지만 암호를 사용하여 세션을 보호해서는 안됩니까?
belka

1
당신이 할지라도, 당신은 얼마나 자주 당신 옆에 앉아서 당신을 배우고 배우도록 도와 줍니까?
connexo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.