[ssh] 한 클라이언트에서 여러 SSH 개인 키를 사용하는 가장 좋은 방법

여러 개인 키를 사용하여 다른 서버 또는 동일한 서버의 다른 부분에 연결하고 싶습니다 (내 서버 사용은 서버의 시스템 관리, Git 관리 및 일반적인 Git 사용입니다). 나는 단순히 id_rsa파일에 키를 쌓아 두는 것을 시도했다 .

분명히이 작업을 수행하는 간단한 방법은 명령을 사용하는 것입니다

ssh -i <key location> login@server.example.com

꽤 번거 롭습니다.

이 작업을 좀 더 쉽게 수행하는 방법에 대한 제안 사항이 있습니까?



답변

내에서 .ssh/config:

Host myshortname realname.example.com
    HostName realname.example.com
    IdentityFile ~/.ssh/realname_rsa # private key for realname
    User remoteusername

Host myother realname2.example.org
    HostName realname2.example.org
    IdentityFile ~/.ssh/realname2_rsa  # different private key for realname2
    User remoteusername

등등.


답변

연결시 ssh에게 여러 키를 연속해서 시도하도록 지시 할 수 있습니다. 방법은 다음과 같습니다.

$ cat ~/.ssh/config
IdentityFile ~/.ssh/id_rsa
IdentityFile ~/.ssh/id_rsa_old
IdentityFile ~/.ssh/id_ed25519
# ... and so on

$ ssh server.example.com -v
....
debug1: Next authentication method: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa
debug1: read PEM private key done: type RSA
debug1: Authentications that can continue: publickey
debug1: Trying private key: /home/example/.ssh/id_rsa_old
debug1: read PEM private key done: type RSA
....
[server ~]$

이런 식으로 어떤 키가 어떤 서버에서 작동하는지 지정할 필요가 없습니다. 첫 번째 작업 키만 사용합니다.

또한 주어진 서버가 키를 수락하려는 경우에만 암호를 입력하십시오. 위에서 볼 수 있듯이 ssh는 암호가 .ssh/id_rsa있더라도 암호를 요구하지 않았습니다 .

분명히 다른 답변과 마찬가지로 서버 당 구성보다 우수하지는 않지만 적어도 연결하는 모든 서버에 대해 구성을 추가 할 필요는 없습니다!


답변

Randal Schwartz대답은 거의 모든 도움이되었습니다. 서버에 다른 사용자 이름이 있으므로 사용자 키워드를 파일 에 추가해야 합니다.

Host           friendly-name
HostName       long.and.cumbersome.server.name
IdentityFile   ~/.ssh/private_ssh_file
User           username-on-remote-machine

이제 이름을 사용하여 연결할 수 있습니다.

ssh friendly-name

OpenSSH 매뉴얼 페이지 에서 더 많은 키워드를 찾을 수 있습니다 . 참고 : 나열된 키워드 중 일부는 이미 / etc / ssh / ssh_config 파일에있을 수 있습니다.


답변

이전 답변에서는 여러 ssh 키를 관리하기 위해 구성 파일을 만드는 방법을 올바르게 설명했습니다. 설명해야 할 중요한 점 은 리포지토리를 복제하는 동안 호스트 이름을 별칭 이름으로 바꾸는 것입니다 .

회사의 GitHub 계정 사용자 이름이 abc1234 라고 가정합니다 . 개인 GitHub 계정의 사용자 이름이 jack1234 라고 가정하십시오.

그리고 두 개의 RSA 키, 즉 id_rsa_companyid_rsa_personal 을 생성했다고 가정합니다 . 따라서 구성 파일은 다음과 같습니다.

# Company account
Host company
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_company

# Personal account
Host personal
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_personal

이제 회사의 GitHub 계정에서 저장소 (데모라고 함) 를 복제 할 때 저장소 URL은 다음과 같습니다.

Repo URL: git@github.com:abc1234/demo.git

이제을 수행하는 동안 git clone위의 저장소 URL을 다음과 같이 수정해야합니다.

git@company:abc1234/demo.git

구성 파일에 정의 된대로 github.com이 이제 “company”라는 별칭으로 대체되는 방법에 주목하십시오.

마찬가지로 구성 파일에 제공된 별명에 따라 개인 계정에서 저장소의 복제 URL을 수정해야합니다.


답변

foo:~$ssh-add ~/.ssh/xxx_id_rsa

다음을 추가하기 전에 테스트해야합니다.

ssh -i ~/.ssh/xxx_id_rsa username@example.com

오류에 문제가있는 경우 때때로 파일의 보안을 변경하면 도움이됩니다.

chmod 0600 ~/.ssh/xxx_id_rsa


답변

  1. SSH 키를 생성하십시오.

    $ ssh-keygen -t rsa -C <email1@example.com>
    
  2. 생성 another SSH key:

    $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <email2@example.com>
    

    이제 두 개의 공개 키 ( id_rsa.pub , accountB.pub )가 ~/.ssh/디렉토리 에 있어야합니다 .

    $ ls -l ~/.ssh     # see the files of '~/.ssh/' directory
    
  3. ~/.ssh/config다음 내용으로 구성 파일 을 작성하십시오 .

    $ nano ~/.ssh/config
    
    Host bitbucket.org
        User git
        Hostname bitbucket.org
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa
    
    Host bitbucket-accountB
        User git
        Hostname bitbucket.org
        PreferredAuthentications publickey
        IdentitiesOnly yes
        IdentityFile ~/.ssh/accountB
    
  4. default계정 에서 복제

    $ git clone git@bitbucket.org:username/project.git
    
  5. accountB계정 에서 복제

    $ git clone git@bitbucket-accountB:username/project.git
    

여기 더보기


답변

ssh-agent 사용에 대해 Tuomas에 동의합니다. 또한 업무용으로 두 번째 개인 키를 추가하고 싶었고이 자습서 는 저에게 매력처럼 작용 했습니다.

단계는 다음과 같습니다.

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/key 예 : ssh-add ~/.ssh/id_rsa
  3. 에 의해 확인 $ ssh-add -l
  4. $ssh -v <host url>예 를 들어 테스트ssh -v git@assembla.com