우분투에서 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.