在Assembla上为git存储库使用生成,存储和配置SSH公钥/私钥对的正确方法是什么?

时间:2013-07-20 05:20:25

标签: git ssh assembla

我在运行Linux Mint 13的桌面上初始化了一个本地git存储库。要推送到Assembla上的存储库,我需要一个ssh密钥。

我首先尝试在终端中生成一个新密钥:

$ ssh-keygen -t rsa

回复是:

Enter file in which to save the key (/home/ryan/.ssh/id_rsa):

我试过“gitrep”。然后我收到以下消息。

Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

我把它们留空是因为据我所知它们是可选的,但只是为了记录,添加密码不会改变结果。然后...

Your identification has been saved in gitrep.
Your public key has been saved in gitrep.pub.
The key fingerprint is:
da:80:b9:c5:cd:50:9c:1c:49:7f:b7:db:71:92:1e:6a ryan@ryan-MS-7309
The key's randomart image is:
+--[ RSA 2048]----+
|       +++       |
|       .=.       |
|      .   . . .  |
|     + +   . . o |
|    o + S     =..|
|     o +     o =o|
|    . . .   E o .|
|           .     |
|                 |
+-----------------+

现在,我导航到home / ryan / .ssh / id_rsa文件夹是空的,但这是奇怪的事情。如果我使用与其添加的密钥相同的文件名再次重做上述过程:

gitrep already exists.
Overwrite (y/n)?

我不明白发生了什么。

我的问题的下一部分是我应该对这个生成的文件做什么。我把它留在原处吗?我是否将信息复制到Assembla上的某个地方。

如果我以不遵循实际流程的方式提出问题,我提前道歉,因为我对这个问题并不十分熟悉。

3 个答案:

答案 0 :(得分:2)

由于您只是输入gitrep,它只是将其保存在您当前的目录中(显然是您的主目录,从上面的示例来看)。

检查并查看是否存在~/gitrep~/gitrep.pub。当您要求提供公钥时,您需要将gitrep.pub文件的内容复制到目的地。

答案 1 :(得分:1)

原始海报陈述(强调我的):

  

然后我收到以下消息。

     
Enter passphrase (empty for no passphrase):  
Enter same passphrase again:
  
     

我把它们留空是因为据我所知它们是可选的,但仅仅是为了记录, 添加密码短语不会改变结果

我不同意见。 添加密码加密您的私钥 ,这样如果有人设法从您的计算机窃取您的私钥文件,他们仍然无法读取和使用它用来解密它的密码。

你添加密码可选是正确的,但它仍然强烈推荐

为了说明差异,我们假设您的 未加密的 私钥文件内容(没有密码)看起来像这样(示例改编自{ {3}})

-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEArCQG213utzqE5YVjTVF5exGRCkE9OuM7LCp/FOuPdoHrFUXk
y2MQcwf29J3A4i8zxpES9RdSEU6iIEsow98wIi0x1/Lnfx6jG5Y0/iQsG1NRlNCC
aydGvGaC+PwwWiwYRc7PtBgV4KOAVXMZdMB5nFRaekQ1ksdH/360KCGgljPtzTNl
09e97QBwHFIZ3ea5Eih/HireTrRSnvF+ywmwuxX4ubDr0ZeSceuF2S5WLXH2+TV0
    ... etc ... lots of base64 blah blah ...
-----END RSA PRIVATE KEY-----

存储在您的私钥中的此值可用于冒充您已授予公钥的任何第二方(在本例中为Assembla)。它基本上好像是黑客窃取了您帐户的密码并用它来登录......在SSH世界中,这就等同于此。

现在,让我们假设如果您使用密码加密了上面的相同私钥,那么文件内容将如下所示(再次改编自Improving the security of your SSH private key files):

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,D54228DB5838E32589695E83A22595C7

3+Mz0A4wqbMuyzrvBIHx1HNc2ZUZU2cPPRagDc3M+rv+XnGJ6PpThbOeMawz4Cbu
lQX/Ahbx+UadJZOFrTx8aEWyZoI0ltBh9O5+ODov+vc25Hia3jtayE51McVWwSXg
wYeg2L6U7iZBk78yg+sIKFVijxiWnpA7W2dj2B9QV0X3ILQPxbU/cRAVTd7AVrKT
    ... etc ...
-----END RSA PRIVATE KEY-----

您是否看到内容与未加密文件有何不同?这使得你的私钥对于碰巧偷窃它的人来说毫无用处,除非他们碰巧有密码将其解密回未加密的形式。

这就是GitHub为Improving the security of your SSH private key files提供的原因:

  

密码不是很安全,你已经知道了。如果你使用一个容易记住的,它更容易猜测或暴力。如果您使用的是随机的,则很难记住,因此您更倾向于将密码写下来。这些都是非常糟糕的事情。这就是您使用ssh密钥的原因。

     

但是使用没有密码短语的密钥与在计算机上的文件中记下该随机密码基本相同。任何能够访问您的驱动器的人都可以访问您使用该密钥的每个系统。这也是一件非常糟糕的事情。解决方案很明显,添加密码。

在同一篇帮助文章中,他们会解释Why you need a passphrase for your private SSH key,这样您每次使用私钥发出SSH请求时都不必继续输入。

答案 2 :(得分:1)

当你走到这一步时:

“输入要保存密钥的文件(/home/ryan/.ssh/id_rsa):”

您应该只接受默认值,并将您的密钥保存在.ssh文件夹中的主目录(/ home / ryan)中,作为id_rsa。然后,您的公钥将位于/home/ryan/.ssh/id_rsa.pub< ---此密钥是您要上传到Assembla帐户的密钥。

现在您已将ssh密钥存储在默认位置,您无需执行任何其他操作即可使用它。

随着它上传到您的Assembla帐户,您将能够然后git clone:

git clone git@git.assembla.com:repo_name

当您回答“gitrep”时,您将保存此文件的密钥,在当前目录中,我假设为主目录(/ home / ryan)。