使用ssh-keygen创建SSH密钥不会创建.ssh文件夹。

43
Great! How can I help you with translating text?
ssh-keygen -C "email@email.com" -t rsa

一切看起来都很好,我收到了消息。

Enter file in which to save the key (/c/Users/user/.ssh/id_rsa)

然后我得到了确认:

Your public key has been saved in project.pub

但是我无法访问这个文件夹!它不存在,甚至不是一个隐藏的文件夹。我不明白为什么它没有生成。我正在使用Windows 7 Ultimate。


如果你创建了文件夹,密钥在生成成功后不会出现。你解决了这个问题吗?我现在也遇到了同样的问题。 - iamthevoid
3
如果你将 project 作为文件名,它将在当前目录中创建。如果你想将其创建在 .ssh 文件夹中,可以进入该文件夹后创建或直接输入完整路径。 - Ophidian
8个回答

38
你可以先创建预期的文件夹,然后检查你是否能够访问它:
mkdir "%USERPROFILE%\.ssh"
dir "%USERPROFILE%\.ssh"
cd "%USERPROFILE%\.ssh"

确保您没有一个名为HOME的Windows环境变量,因为在使用ssh.exessh-keygen.exe命令时,它会优先于CMD会话(而不是bash会话)。
echo HOME='%HOME%'

你可以使用(从CMD或bash)
ssh-keygen -C "vonc@xxxx" -t rsa -P "" -f ~/.ssh/mykey
                                       ^^^^^^^^^^^^^^^

那将会创建一个 %USERPROFILE%\.ssh\mykey%USERPROFILE%\.ssh\mykey.pub


作为一个测试,我刚刚创建了我的密钥,没有任何问题(Seven Ultimate 64位,msysgit 1.6.5.1.1367.gcd48)。
$ ssh-keygen -C "vonc@xxxx" -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/VonC/.ssh/id_rsa):# just press enter
                                                                # to accept the
                                                                # default location
Enter passphrase (empty for no passphrase):                     
Enter same passphrase again:
Your identification has been saved in /c/Users/VonC/.ssh/id_rsa.
Your public key has been saved in /c/Users/VonC/.ssh/id_rsa.pub.
The key fingerprint is:
xx:yy:zz:aa:bb:cc:... vonc@xxxx

结果如下:
VonC@P ~/.ssh
$ ls -alrt
total 10
-rw-r--r--    1 VonC Administ      642 May 23 21:47 known_hosts
drwxr-xr-x   43 VonC Administ    16384 Jun 15 17:01 ..
-rw-r--r--    1 VonC Administ      398 Jun 19 16:14 id_rsa.pub
-rw-r--r--    1 VonC Administ     1675 Jun 19 16:14 id_rsa
drwxr-xr-x    2 VonC Administ        0 Jun 19 16:14 .

请在您的bash会话中(而不是CMD)检查一下您的$HOME环境变量设置的值。
VonC@P ~/.ssh
$ env|grep HOME
HOMEPATH=\Users\VonC
HOME=/c/Users/VonC     # <=== this must be correctly set
HOMEDRIVE=C:

12
谢谢VonC,你让我意识到我的错误是在要求输入用于保存密钥的文件时,我输入了一个名称。然后我只是按了回车键,它就生成了id_rsa和id_rsa.pub文件。现在一切都运作得很完美。 - Charles Ouellet
@couellet:感谢您的反馈。我已经编辑了我的答案以反映它。 - VonC
@VonC 谢谢,这是我的情况。 - lenhhoxung
检查 .ssh 是否不是符号链接(Mackup 和其他备份工具会这样做)。 - Entalpi

37

我曾经遇到同样的问题,后来发现我试图在要求输入“输入要保存密钥的文件名 (c/users/user.name/.ssh/id_rsa)”时输入了文件名。

相反,只需输入空白并按Enter键即可使用默认设置,您就可以继续操作了。


16
我意识到需要使用完整路径,而不仅是名称,否则文件将被创建在命令行当前工作目录。此外,如果你只输入名称,你将会看到默认路径的总结:"bla bla saved in /c/Users/{UserName}/.ssh/id_rsa_name" - CeH9
@CeH9 - 顺便说一下,当我犯了只输入名称的错误时,它并没有给出完整路径;它只是说“..保存在我的文件名中。”[如果我按回车键接受默认路径,那么它就有了该默认位置的完整路径。] - ToolmakerSteve

9

我在创建 SSH 密钥时遇到了类似的问题,我是这样解决的:

使用 ssh-keygen -t rsa 命令生成 SSH 密钥,它会提示你

Enter file in which to save the key (/Users/iamarasekera/.ssh/id_rsa):

不要输入任何文件名,直接按“Enter”键继续。

然后它会创建 .ssh 文件夹,并在其中生成 2 个文件:id_rsaid_rsa.pub

你还会在命令提示符上看到消息Created directory '/<path to your current folder>/.ssh'.

接下来,它会提示你输入密语(passphrase),最好不要跳过。

请参考以下内容。

enter image description here

注意:如果你在提示你输入文件名以保存密钥时输入文件名,则会在当前位置的目录中创建 <filename><filename>.pub 两个文件,而不会创建 .ssh 文件夹。

希望这可以帮到你。


1
我一直在想为什么它没有创建任何东西,哈哈。这解释了,谢谢。 - Abhishek Sengupta
1
在当前所在的目录中,不创建 .ssh 文件夹,这就是关键词。 - DiskJunky

8
如果您已经有一个名为"id_rsa"的密钥,并且想要以其他名称保存新密钥,您需要提供完整路径,如果我理解正确。因此,当它询问时:
Enter file in which to save the key (/c/Users/myname/.ssh/id_rsa):

您可以输入 /c/Users/myname/.ssh/new_key 来创建它(我刚刚测试过)。

3
我遇到了类似的情况,下面是对我有效的解决方案。
当创建密钥时出现以下消息时 -
输入要保存密钥的文件(C:\ Users \ aditya / .ssh / id_rsa):
在此处只需按Enter键,不要提供任何文件名,否则密钥将在您的当前工作目录中创建。

1
文件名本身是不够的!
你需要指定完整路径。根据您的要求,
/c/Users/user/.ssh/project
否则,您的密钥将存储在命令提示符的当前目录中。
例如,如果您从/c/project运行,则会将密钥存储在/c/project/project和/c/project/project.pub中。

0

0
这可能有点晚了,但是在这里提供的解决方案没有起作用之后,我只是以管理员身份运行了Git Bash。这样做可以按预期工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接