设置默认的ssh密钥位置

62

默认情况下,ssh会在~/.ssh文件夹中查找它的密钥。我想强制它始终在另一个位置查找。

我使用的解决方法是将来自非标准位置的密钥添加到代理中:

ssh-agent
ssh-add /path/to/where/keys/really/are/id_rsa 

(适用于Linux和Windows上的MingW32 shell)


顺便说一句,我想这么做的原因是为了把我的钥匙保存在Dropbox中..非常有效! - tardate
8
@tardate,嗯,信任Dropbox管理你的密钥似乎很危险,除非你能很好地设置密码保护... - gatoatigrado
3
您应该在每台计算机上都有单独的密钥,这样当某人偷走其中一台计算机时,您只需从服务器中删除其公钥,而不会禁用其他计算机。在Dropbox上拥有私钥相当于在Dropbox上拥有包含密码的文本文件 => 可能会发生或可能不会发生,但仍然是一个不好的想法。 - equivalent8
@equivalent8 - 已经注意到了!我主要使用这个工具将我的(唯一的)电脑从Dropbox中进行备份。这样,当我有了新电脑时,它就可以立即使用了。 - tardate
3个回答

99

如果你只是想指向一个不同位置的身份文件,那么你可以在 ~/.ssh/config 文件中修改以下内容:

IdentityFile ~/.foo/identity

使用man ssh_config查找其他配置选项。


3
请注意,您可以多次列出此参数以针对多个密钥。但是,在系统中列出太多的密钥(通常>4)可能会导致身份验证在提示输入密码之前失败,特别是当您的密钥无效时。ssh-agent或keychain(http://www.gentoo.org/proj/en/keychain/)在此处非常有用。 - jmanning2k
如果你对你的SSH密钥进行了密码保护,最好使用ssh-add your-private-key命令添加私钥,否则它将始终要求输入密钥密码。 - Pengfei.X
我不得不在配置文件的开头添加那行代码。将其追加到末尾是无效的。 - SebK

24

man ssh 给出了一些有用的选项。

-i identity_file 选择一个文件,从中读取用于RSA或DSA身份验证的标识(私钥)。 协议版本1的默认值为~/.ssh/identity,协议版本2的默认值为~/.ssh/id_rsa和~/.ssh/id_dsa。 标识文件也可以在配置文件中按主机指定。 可以使用多个-i选项(以及在配置文件中指定多个标识)。

所以您可以在bash配置中创建一个别名,例如

alias ssh="ssh -i /path/to/private_key"

我没有研究过ssh配置文件,但与-i选项类似,这也可以是别名

-F configfile 指定替代的每个用户配置文件。 如果在命令行上给出配置文件,则将忽略系统范围的配置文件(/etc/ssh/ssh_config)。 每个用户的配置文件的默认值为~/.ssh/config。


0

关于 Windows 10 上的 Git Bash 的更新:在我的系统上,Git Bash 应用程序将通过 ssh 层(由 OpenSSH 提供)工作,请查找名为 HOME 的环境变量(按 Windows 键并键入“env”以编辑 env 变量)。如果此变量指向不存在的位置,则 Git Bash 可能永远不会打开。

与 Linux 一样,Git Bash 应用程序将在 %HOME%\.ssh 中查找其 config 文件。

例如,如果您将 HOME 设置为 C:\Users\Yourname,则它将查找 C:\Users\Yourname\.ssh

最后,在 config 文本文件中,Git Bash 将查找 IdentifyFile 路径。在 Windows 上,使用 cygwin 符号设置路径。

例如,设置为 /e/var/www/certs/keys/your_passwordless_key.key

额外福利:免费的 PHPStorm 将使用该设置。如果您刚刚更改了设置,请重新启动 IDE。


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