複数の秘密鍵を使用して、異なるサーバーまたは同じサーバーの異なる部分に接続したい(私の用途は、サーバーのシステム管理、Gitの管理、および同じサーバー内での通常のGitの使用)。私は単にid_rsa
ファイルのキーを無駄にスタックすることを試みました。
明らかにこれを行う簡単な方法はコマンドを使用することです。
ssh -i <key location> [email protected]
それはかなり面倒です。
これをもう少し簡単にする方法についての提案はありますか?
私の.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 からの回答は、私をほぼ完全に助けてくれました。私はサーバー上で別のユーザー名を持っているので、ファイルに 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ファイルにすでに存在するものもあります。
foo:~$ssh-add ~/.ssh/xxx_id_rsa
追加する前に、必ずテストしてください。
ssh -i ~/.ssh/xxx_id_rsa [email protected]
エラーが発生した際に、ファイルのセキュリティを変更することがあります。
chmod 0600 ~/.ssh/xxx_id_rsa
前の答えは複数の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を変更する必要があります。
Ssh-agentの使用についてTuomasに同意します。私は仕事用の2つ目の秘密鍵も追加したいと思い、 このチュートリアル は私にとって魅力的なように働きました。
手順は以下のとおりです。
$ ssh-agent bash
$ ssh-add /path.to/private/key
例ssh-add ~/.ssh/id_rsa
$ ssh-add -l
で確認$ssh -v <Host url>
でテストしてください。例えばssh -v [email protected]
SSHキーを生成します。
$ ssh-keygen -t rsa -C <[email protected]>
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
以下の内容で設定ファイル~/.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
default
アカウントから複製します。
$ git clone [email protected]:username/project.git
accountB
アカウントから複製します。
$ git clone git@bitbucket-accountB:username/project.git
私はしばらく前にこの問題に遭遇しました。私は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
詳細については このリンク を参照してください。
鍵にはssh-agentを使用してください。
最近のバージョンの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/*
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
~/.ssh
フォルダーにconfig
という名前の構成ファイルを作成できます。それは含むことができます:
Host aws
HostName *yourip*
User *youruser*
IdentityFile *idFile*
これはあなたがこのようなマシンに接続することを可能にします
ssh aws
重要: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エージェントを起動するためにバリアントを使用することがあります。
アトラシアンのブログページで言及されているように 以下のテキストを含む 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
それからあなたは単に接尾辞ドメインを使ってチェックアウトすることができ、そしてプロジェクト内であなたは作者名などをローカルに設定することができます。
OpenSSL 1.0.1e-fipsのOpenSSH_5.3p1を実行しているCentos 6.5では、キーファイルの名前を変更してデフォルトの名前を持たないようにすることで問題を解決しました。私の.sshディレクトリには、id_rsa_fooとid_rsa_barが含まれていますが、id_rsaなどは含まれていません。