如何在〜/ .ssh目录中管理多个ssh密钥

abb*_*ood 5 git ssh github bitbucket

我确定我们都会不时收到此错误:

$ git push origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Run Code Online (Sandbox Code Playgroud)

典型的补救方法是简单地创建一个公钥/私钥对,并与您的git主机(在我的情况下为bitbucket,及其指示)共享它

事实是,我有很多账户都要求我有一个公共/私有密钥对(例如,我需要保存一个密钥才能连接到AWS ..等)..所以我要做的就是创建这些密钥并将它们保存在单独的目录中,即

~/.ssh $ find .
./awskeys
./awskeys/id_rsa
./awskeys/id_rsa.pub
./bitbucket
./bitbucket/id_rsa
./bitbucket/id_rsa.pub
Run Code Online (Sandbox Code Playgroud)

但是然后不时弹出此错误..要解决它,我必须将相关密钥移回根目录〜/ .ssh。这对我来说似乎不对。我怎样才能可靠地做到这一点?

Von*_*onC 6

您可以在任何位置使用它们,但是它们的权限和父文件夹的权限必须严格:

  • 父文件夹(对于其他文件夹和所有文件夹)没有可写访问权限
  • 公开密钥为644
  • 600个私钥。

然后是你:

  • 在中声明这些不同的键~/.ssh/config此处为示例
  • 更改远程URL,以使用~/.ssh/config描述正确的ssh键使用的文件的适当条目。

这意味着像这样的条目:

Host mygithub
    User           git
    IdentityFile   ~/.ssh/mypath/mykey # wherever your "new" key lives
    IdentitiesOnly yes
Run Code Online (Sandbox Code Playgroud)

允许您将git@github.com:username / repo之类的网址替换为:

git remote set-url origin mygithub:username/repo
Run Code Online (Sandbox Code Playgroud)

  • @abbood *这*是*真正*的管理多个ssh密钥的方式。 (2认同)