web-dev-qa-db-ja.com

1つのクライアントで複数のSSH秘密鍵を使用するための最良の方法

複数の秘密鍵を使用して、異なるサーバーまたは同じサーバーの異なる部分に接続したい(私の用途は、サーバーのシステム管理、Gitの管理、および同じサーバー内での通常のGitの使用)。私は単にid_rsaファイルのキーを無駄にスタックすることを試みました。

明らかにこれを行う簡単な方法はコマンドを使用することです。

ssh -i <key location> [email protected] 

それはかなり面倒です。

これをもう少し簡単にする方法についての提案はありますか?

762
Justin

私の.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

等々。

1097
Randal Schwartz

接続時に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のパスワードがあってもパスワードを要求しませんでした。

確かに他の答えのようにサーバーごとの設定を上回るわけではありませんが、少なくともあなたが接続するすべてのそしてすべてのサーバーのために設定を追加する必要はないでしょう!

262
spacesix

Randal Schwartz からの回答は、私をほぼ完全に助けてくれました。私はサーバー上で別のユーザー名を持っているので、ファイルに User キーワードを追加する必要がありました。

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ファイルにすでに存在するものもあります。

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

追加する前に、必ずテストしてください。

ssh -i ~/.ssh/xxx_id_rsa [email protected]

エラーが発生した際に、ファイルのセキュリティを変更することがあります。

chmod 0600 ~/.ssh/xxx_id_rsa
94
user420807

前の答えは複数のsshキーを管理するための設定ファイルを作成する方法を正しく説明しました。説明しなければならない重要なことは リポジトリのクローンを作成するときにホスト名を別名に置き換えることです

会社のGitHubアカウントのユーザー名がabc1234 であるとします。あなたの 個人用GitHubアカウントのユーザ名がjack1234だとします

そして、2つのRSAキー、つまり id_rsa_company id_rsa_personal を作成したとします。つまり、 configuration ファイルは以下のようになります。

# 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アカウントから repository (demo) のクローンを作成すると、リポジトリのURLは次のようになります。

Repo URL: [email protected]:abc1234/demo.git

さて、git cloneをしている間、あなたは上記のリポジトリURLを修正するべきです:

git@company:abc1234/demo.git

設定ファイルで定義したように、github.comがエイリアス "company"に置き換えられていることに注目してください。

同様に、設定ファイルで提供されているエイリアスに応じて、個人用アカウントのリポジトリのクローンURLを変更する必要があります。

76
oblivion

Ssh-agentの使用についてTuomasに同意します。私は仕事用の2つ目の秘密鍵も追加したいと思い、 このチュートリアル は私にとって魅力的なように働きました。

手順は以下のとおりです。

  1. $ ssh-agent bash
  2. $ ssh-add /path.to/private/keyssh-add ~/.ssh/id_rsa
  3. $ ssh-add -lで確認
  4. $ssh -v <Host url>でテストしてください。例えばssh -v [email protected]
23
Wahib Ul Haq
  1. SSHキーを生成します。

    $ ssh-keygen -t rsa -C <[email protected]>
    
  2. another SSH keyを生成します。

    $ ssh-keygen -t rsa -f ~/.ssh/accountB -C <[email protected]>
    

    これで、2つの公開鍵( 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 [email protected]:username/project.git
    
  5. accountBアカウントから複製します。

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

詳細はこちら

21
Sajib Khan

私はしばらく前にこの問題に遭遇しました。私は2つのBitbucketアカウントを持っていて、両方のために別々のSSHキーを保存しなければならなかったときに思いました。これは私のために働いたものです。

私は次のように2つの別々のSSH設定を作成しました。

Host personal.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/personal
Host work.bitbucket.org
    HostName bitbucket.org
    User git
    IdentityFile /Users/username/.ssh/work

今私が自分の仕事用アカウントからリポジトリを複製しなければならなかったとき - コマンドは以下の通りでした。

git clone [email protected]:teamname/project.git

このコマンドを次のように修正しなければなりませんでした。

git clone git@**work**.bitbucket.org:teamname/project.git

同様に私の個人アカウントからのクローンコマンドは以下のように修正しなければなりません

git clone git @ personal 。bitbucket.org:name/personalproject.git

詳細については このリンク を参照してください。

13
Ananth Pai

鍵にはssh-agentを使用してください。

11
Tuomas Pelkonen

最近のバージョンのgitでは、リポジトリ固有のgit設定ファイルで sshCommand を指定できます。

  [core]
      repositoryformatversion = 0
      filemode = true
      bare = false
      logallrefupdates = true
      sshCommand = ssh -i ~/.ssh/id_rsa_user   
   [remote "Origin"]
      url = [email protected]:user/repo.git
      fetch = +refs/heads/*:refs/remotes/Origin/*
5
Naga Kiran

Ubuntu 18.04では、何もする必要はありません。

2番目のsshキーを正常に作成した後、システムは各接続に一致するsshキーを見つけようとします。

明確にするために、これらのコマンドで新しいキーを作成できます

# generate key make sure you give it a new name (id_rsa_server2)
ssh-keygen 
# make sure ssh agent is running
eval `ssh-agent`
# add the new key
ssh-add ~/.ssh/id_rsa_server2
# get the public key to add it to a remote system for authentication
cat ~/.ssh/id_rsa_server2.pub
1
GiorgosK

~/.sshフォルダーにconfigという名前の構成ファイルを作成できます。それは含むことができます:

Host aws
    HostName *yourip*
    User *youruser*
    IdentityFile *idFile*

これはあなたがこのようなマシンに接続することを可能にします

 ssh aws
1
Andrew Crowley

重要:ssh-agentを起動する必要があります

次のようにssh-addを使用する前にssh-agentを起動する必要があります(まだ実行されていない場合)。

eval `ssh-agent -s` # start the agent

ssh-add id_rsa_2 # where id_rsa_2 is your new private key file

Evalコマンドは、WindowsのGIT bashでエージェントを起動することに注意してください。他の環境では、SSHエージェントを起動するためにバリアントを使用することがあります。

1
danday74

アトラシアンのブログページで言及されているように 以下のテキストを含む config 内に .ssh を生成します。

#user1 account
 Host bitbucket.org-user1
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user1
     IdentitiesOnly yes

 #user2 account
 Host bitbucket.org-user2
     HostName bitbucket.org
     User git
     IdentityFile ~/.ssh/user2
     IdentitiesOnly yes

それからあなたは単に接尾辞ドメインを使ってチェックアウトすることができ、そしてプロジェクト内であなたは作者名などをローカルに設定することができます。

0
dgbt

OpenSSL 1.0.1e-fipsのOpenSSH_5.3p1を実行しているCentos 6.5では、キーファイルの名前を変更してデフォルトの名前を持たないようにすることで問題を解決しました。私の.sshディレクトリには、id_rsa_fooとid_rsa_barが含まれていますが、id_rsaなどは含まれていません。

0
Chris Owens