우분투에서 ssh-add로 개인 키를 영구적으로 추가하는 방법은 무엇입니까? [닫은]


474

SSH를 통해 서버에 액세스하기 위해 비밀번호로 보호되는 개인 키가 있습니다.

나는 2 개의 리눅스 (우분투 10.04) 머신을 가지고 있으며 ssh-add 명령의 동작은 둘 다 다릅니다.

한 시스템에서 "ssh-add .ssh / identity"를 사용하고 비밀번호를 입력하면 키가 영구적으로 추가됩니다. 즉, 컴퓨터를 종료하고 다시 로그인 할 때마다 키가 이미 추가되었습니다.

다른 하나에서는 로그인 할 때마다 키를 추가해야합니다.

내가 기억하는 한, 나는 두 가지에 대해 같은 일을했습니다. 유일한 차이점은 영구적으로 추가 된 키에서 키가 생성되었다는 것입니다.

다른 기계에도 영구적으로 추가하는 방법을 아는 사람이 있습니까?


1
에이전트는 일시적이어야합니다. 그러나 당신이 ~ / .bashrc에 정도 기계 둘 중 하나에 들어있는 ssh-add 명령의 어딘가가 가능하다
미렉

답변:


632

해결책은 파일에 키 파일을 추가하여 키 파일을 영구적으로 유지하는 것입니다 ~/.ssh/config.

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer

~ / .ssh 디렉토리에 'config'파일이 없으면 파일을 작성해야합니다. 루트 권한이 필요하지 않으므로 간단히 :

nano ~/.ssh/config

... 그리고 요구 사항에 따라 위의 줄을 입력하십시오.

이 작업을 수행하려면 파일에 chmod 600이 있어야합니다 chmod 600 ~/.ssh/config. 명령을 사용할 수 있습니다 .

컴퓨터의 모든 사용자가 키를 사용하도록하려면이 행을 모든 사용자가 /etc/ssh/ssh_config액세스 할 수있는 폴더에 넣으십시오 .

또한 하나의 호스트에만 키를 설정하려면 ~ / .ssh / config에서 다음을 수행 할 수 있습니다.

Host github.com
    User git
    IdentityFile ~/.ssh/githubKey

이는 잘못된 ID를 먼저 시도했기 때문에 서버가 거부하지 않는 ID가 많은 경우 이점이 있습니다. 특정 정체성 만 시도됩니다.


82
구성 파일에 대한 권한은 600이어야합니다.chmod 600 config
generalopinion

6
이것을 사용하여 푸시, 페치 또는 복제 할 때마다 암호를 입력해야합니다. 어떻게 피할 수 있습니까?
Asaf

9
대신 사용하면 ssh-add ~/.ssh/gitHubKey키 암호 문구가 기억됩니다. 내가 제안한 솔루션은 재부팅 동안 영구적으로 설정하는 것이 었습니다.
daminetreg

28
이 답변은 너무 좋아서 ssh-add가 존재하지 않아야합니다. 구성 파일을 영구적으로 편집 할 때 문제를 "일시적으로"수정하고 예기치 않게 중단되는 명령을 원하는 사람.
RussellStewart

2
문제는 이런 종류의 구성에 있습니다. 특정 호스트에 대해 .ssh / config에서 수행하지 않으면 매번 모든 서버에 대해 모든 키를 시도하게됩니다.
daminetreg 5

118

Mac OS X Lion에서 동일한 문제에 대답하지 못했습니다. 나는 추가했다 :

ssh-add ~/.ssh/id_rsa &>/dev/null

내 .zshrc (그러나 .profile도 괜찮을 것입니다)에 고정되어있는 것 같습니다.

(여기서 제안 된 바와 같이 : http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/ )


6
이것은 ssh-add가 보호 된 개인 키의 암호를 기억할 수있는 인증 에이전트를 사용하므로 인증하려고 할 때마다 입력 할 필요가 없기 때문에 제안한 솔루션보다 낫다고 생각합니다. 제안하는 솔루션의 또 다른 장점은 많은 키가있는 경우 ssh 클라이언트는 연결하려는 서버와 관련이없는 키를 제안하지 않으며 실제로이 서버의 키만 제공한다는 것입니다. ssh / config에 나열된 모든 키를 시도하는 동안 MaxAuthTries에 도달하여 서버가 연결을 거부하도록합니다.
daminetreg

1
감사합니다 @daminetreg. 내 특별한 문제는 내 개인 키를 전송하지 않고 개발 시스템의 기토에 액세스해야했습니다. 이 솔루션 ( ForwardAgent yes내 추가와 함께 .ssh/config)은 그 문제를 환상적으로 해결했습니다. 결과적으로 ssh-add &>/dev/null기본 동작은 폴더 ssh-add에서 찾은 키를 추가하는 것처럼 보일 수 있습니다 .ssh.
Aaron

1
나의 이해는 맥 OS에 -K 스위치가 있다는 것입니다 : stackoverflow.com/questions/1909651/...이
니쿠 Tofan

3
@TNick -K은 OS X의 키 체인에 키를 추가합니다. OS X GUI는 외부 서버를 인증하는 데 사용합니다. 그 Q의 포스터는 SSH 터널을 통해 연결되지만 여전히 원격 서버에 연결 중입니다. A- [SSH Tunnel]-> B 내가있는 경우는 원격 서버에 있지만 홈 시스템의 자격 증명에 대한 인증을 원합니다. 은 <- [인증] - B - [접속] -> C 따라서는 -K실제로 도움 않지만, 다른 Q.위한 훌륭한 솔루션입니다
아론

112

ssh-add에 -K 옵션을 사용하여 Mac OSX (10.10)에서 해당 문제를 해결했습니다.

ssh-add -K ~/.ssh/your_private_key

macOS 10.12 이상의 경우 https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain에 설명 된대로 ssh 구성을 추가로 편집해야합니다.


3
이 영구적으로 설정하고자하는 사람들을위한 더 나은 답변입니다
punkrockpolly

12
따라서이 비트 : "Mac OSX (10.10)"...
Andrew K.

1
이것은 Mac OSX에서 훌륭하고 작동하지만 Ubuntu (내 테스트에서는 14.04)에서는 작동하지 않습니다.
haxpor

5
이것은 나를 위해 작동하지 않았다 (OSX 10.12.4에서)
guptron

2
man ssh-addmacOS High Sierra에 따르면 ssh-add -K암호를 키 체인에 저장하고 재부팅 후 ssh-add -A암호를 입력 할 필요가없는을 사용하십시오.
DawnSong

36

Ubuntu 빠른 팁 https://help.ubuntu.com/community/QuickTips 에서 참조 된대로 키 체인을 추가 하십시오.

ssh-agent 및 ssh-add를 지속적으로 시작하는 대신 키 체인을 사용하여 ssh 키를 관리 할 수 ​​있습니다. 키 체인을 설치하려면 여기를 클릭하거나 Synaptic을 사용하여 작업을 수행하거나 명령 줄에서 apt-get을 받으십시오.

커맨드 라인

파일을 설치하는 다른 방법은 터미널 (응용 프로그램-> 액세서리-> 터미널)을 열고 다음을 입력하는 것입니다.

sudo apt-get install keychain

파일 편집

그런 다음 $ {HOME} /. bashrc 또는 /etc/bash.bashrc에 다음 행을 추가해야합니다.

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh

호기심으로 두 번째 명령은 정확히 무엇입니까? 현재 사용자에게 권한이 열려 있습니까?
Vincent Buscarello

1
.별칭이다source
브래드 솔로몬

18

@Aaron의 솔루션을 사용해 보았는데 터미널에서 새 탭을 열 때마다 키를 다시 추가하기 때문에 제대로 작동하지 않았습니다. 그래서 조금 수정했습니다 (대부분의 키는 암호로 보호되어 있으므로 출력을 / dev / null로 보낼 수는 없습니다).

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi

이것이하는 것은 ssh-add -l특정 키에 대한 출력 (추가 된 모든 키를 나열)을 확인하고 찾지 못한 경우로 추가합니다 ssh-add.

이제 터미널을 처음 열면 개인 키의 암호를 묻는 메시지가 표시되며 컴퓨터를 재부팅 (또는 로그 아웃-확인하지 않음) 할 때까지 다시 묻지 않습니다.

나는 많은 키를 가지고 있기 때문에 ssh-add -l성능을 향상시키기 위해 변수에 출력을 저장합니다 (적어도 성능이 향상되는 것 같습니다 :))

PS : 나는 리눅스에있어이 코드는 내 갔다 ~/.bashrc파일 - 당신이 맥 OS X에있는 경우, 나는 당신이에 추가해야 가정 .zshrc또는.profile

편집 : 주석에서 @Aaron이 지적한 것처럼 .zshrc파일은 zsh셸 에서 사용 되므로 해당 파일을 사용 하지 않으면 (확실하지 않은 경우 가장 가능성이 높으며 bash대신 사용)이 코드는 .bashrc파일 로 이동 하십시오.


3
.zshrc입니다 zsh내가 대신 사용하는 쉘 bash. 당신이 사용하는 경우 bash맥 OS X (기본값)에, 그것은 것 .bashrc뿐만 아니라이.
Aaron

1
ssh-add -l리턴 코드 echo $?키를 추가할지 여부를 결정하는 데 사용할 수 있습니다. bash가있는 내 리눅스 컴퓨터 ssh-add -l에서 키 파일 이름을 출력하지 않습니다. 리턴 코드는 항상 작동합니다.
Bharat G

12

내 경우에는 해결책은 다음과 같습니다.

구성 파일에 대한 권한은 600이어야합니다. chmod 600 config

위의 의견에서 언급했듯이 일반 의견

구성 파일 내용을 만질 필요가 없습니다.


Linux Mint 17.1에서는 충분하지 않았습니다.
베나 레스

나는 600이 의미가 없다고 생각합니다. man ssh~/.ssh/config사용자 가 파일을 읽고 쓸 수 있으며 다른 사람이 쓸 수는 없다고 말합니다 .
DawnSong

600은 사용자에 대해서만 읽고 쓸 수 있습니다
Enthusiasmus

6

우분투 16.04에서 동일한 문제가 발생했습니다. 일부 키는 영구적으로 추가되었으며 다른 키는 ssh-add모든 세션 에서 실행해야 했습니다. 영구적으로 추가 된 키에는 개인 키와 공개 키가 모두 ~/.ssh있고 모든 세션에서 잊어 버린 키는 ~/.sshdir에 개인 키 만 있음을 알았습니다 . 따라서 해결책은 간단합니다. 실행 하기 전에 개인 키와 공개 키를 모두 복사해야합니다 .~/.sshssh-add

추신 : Gnome Wiki를 이해 하는 한 Gnome Desktop Environment의 일부인 gnome-keyring 도구 덕분에 제 방법이 작동합니다. 따라서 Gnome 또는 Gnome 기반 DE를 사용하는 경우에만 내 방법이 작동해야합니다.


1
과소 평가. 이렇게하면 두 시간 동안 검색 한 후 추가 스크립트 나 패키지가 필요하지 않고 문제가 해결되었습니다.
etagenklo

멋지다! 훌륭한 형사 일. 나는 이것을 이해했을 것이라고 생각하지 않습니다.
nicorellius

4

"~ / .bashrc"에 다음 줄을 추가하면 문제가 해결되었습니다. Ubuntu 14.04 데스크톱을 사용하고 있습니다.

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"

3

우분투 14.04 (아마도, 아마도 여전히)에서는 콘솔조차 필요하지 않습니다.

  • seahorse"키"를 찾은 것을 시작 하거나 시작하십시오.
  • 거기에 SSH 키를 만들거나 가져옵니다.
    • 비밀번호 문구를 비워 둘 필요가 없습니다.
    • 공개 키를 서버 (또는 그 이상)로 푸시 할 수도 있습니다.
  • ssh-agent가 실행 되고이 키가로드되었지만 잠겨 있습니다.
  • 를 사용 ssh하면 에이전트를 통해 ID (예 : 키)를 가져옵니다
  • 세션 중에 처음 사용하면 암호가 확인됩니다
    • 로그인하면 자동으로 키 잠금을 해제 할 수 있습니다
    • 이것은 로그인 인증이 키의 암호를 감쌀 때 사용됨을 의미합니다
  • 참고 : 신원을 전달하려면 (예 : 에이전트 전달) 사용자 ssh를 호출 -A하거나 기본값으로 설정하십시오.
    • 그렇지 않으면 나중에 세 번째 컴퓨터에 로그인 한 컴퓨터에서 해당 키로 인증 할 수 없습니다

3

두 개의 id_rsa 키를 사용하여 Ubuntu를 실행합니다. (일을위한 개인적인 것). ssh-add는 하나의 키 (개인 키)를 기억하고 매번 회사를 잊어 버립니다.

두 개인의 차이를 확인한 후 개인 키는 400 개의 권리를 보유하고 회사 키는 600 개의 권리를 보유했습니다. (u + w가 있음). 회사 키에서 사용자 쓰기 권한을 제거하면 (uw 또는 400으로 설정) 문제가 해결되었습니다. ssh-add는 이제 두 키를 모두 기억합니다.



1

아주 간단한 ^ _ ^ 두 단계

1. 음 설치 키 체인

.bash_profile에 아래 코드를 추가하십시오.

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh

12
우분투 yu 바보 없어;)
Adam F

1

피쉬 쉘을 사용하는 사용자는 다음 함수를 사용하여에서 ~/.config/fish/config.fish또는 별도의 구성 파일 로 호출 할 수 있습니다 ~/.config/fish/conf.d/loadsshkeys.fish. id_rsa 로 시작하는 모든 키를에로드 합니다 ssh-agent.

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys

당신이 갖고 싶어 ssh-agent당신이 사용할 수있는 터미널 열 때 자동으로 시작 tuvistavie / 물고기 SSH 에이전트를 이 작업을 수행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.