如何在Ubuntu上使用ssh-add永久添加私钥?

dud*_*ein 442 ssh ubuntu key ssh-agent

我有一个受密码保护的私钥,可以通过SSH访问服务器.

我有2台linux(ubuntu 10.04)机器,ssh-add命令的行为在两者中都不同.

在一台机器上,一旦我使用"ssh-add .ssh/identity"并输入我的密码,密钥就会被永久添加,即每次关闭计算机并再次登录时,密钥都已添加.

在另一个中,我必须在每次登录时添加密钥.

据我记忆,我对两者做了同样的事情.唯一的区别是密钥是在永久添加的密钥上创建的.

有谁知道如何永久地将它添加到其他机器?

dam*_*reg 588

解决方案是通过在您的~/.ssh/config文件中添加密钥文件来强制永久保存密钥文件:

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer
Run Code Online (Sandbox Code Playgroud)

如果〜/ .ssh目录中没有'config'文件,那么你应该创建一个.它不需要root权限,所以简单地说:

nano ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)

...并根据您的要求输入上面的行.

为此,文件需要有chmod 600.您可以使用该命令chmod 600 ~/.ssh/config.

如果您希望计算机上的所有用户都使用密钥将这些行放入/etc/ssh/ssh_config,并将密钥放在所有人都可以访问的文件夹中.

此外,如果要设置特定于一个主机的密钥,可以在〜/ .ssh/config中执行以下操作:

Host github.com
    User git
    IdentityFile ~/.ssh/githubKey
Run Code Online (Sandbox Code Playgroud)

您需要使用@github而不是@ github.com进行克隆,但这样做的好处是只会尝试使用此密钥.

  • 配置文件的权限应该是600.```chmod 600 config``` (76认同)
  • 这个答案非常好,ssh-add不应该存在.谁想拥有一个"暂时"修复问题的命令,并且只能永久编辑配置文件时意外中断. (24认同)
  • 使用`ssh-add~/.ssh/gitHubKey`,它会记住你的密钥密码.我提出的解决方案是在重新启动时永久设置它. (8认同)
  • 我必须为每次推送,获取或克隆输入密码,我该如何避免? (5认同)
  • 此解决方案未使用 ssh-agent。- 有区别吗?是的,你不能通过代理转发来转发他们的身份。 (4认同)
  • 问题在于这种配置,如果你不在.ssh/config中为特定主机执行此操作,则每次都会针对所有服务器尝试所有密钥. (2认同)
  • 如果将它放在配置文件中,则可以使用@ github.com进行克隆:`Host github.com` (2认同)

Aar*_*ron 111

在Mac OS X Lion下,我没有回答同样的问题.我最后补充说:

ssh-add ~/.ssh/id_rsa &>/dev/null
Run Code Online (Sandbox Code Playgroud)

对我的.zshrc(但.profile也没关系),这似乎修复了它.

(如此处所示:http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/)

  • 我认为这比我提出的解决方案更好,因为ssh-add使用的身份验证代理可以记住受保护私钥的密码,因此每次尝试进行身份验证时都不需要输入密码.您建议的解决方案的另一个优点是,如果您有很多密钥,ssh客户端将不会建议与您尝试连接的服务器无关的密钥,实际上它只提供用于此服务器的密钥,并赢得了'在尝试ssh/config中列出的所有密钥时,由于到达MaxAuthTries,导致服务器拒绝连接. (6认同)
  • @TNick` -K`为OS X的钥匙串添加了密钥,OS X GUI用于向外部服务器进行身份验证.Q中的海报通过SSH隧道连接,但仍然只是连接到远程服务器.**A** - [SSH隧道] - > B我所处的情况是我在远程服务器上,但希望身份验证与家庭系统上的凭据相对应.A < - [Auth] - **B** - [Connect] - > C所以`-K`实际上没有用,但对其他Q来说是一个很好的解决方案. (3认同)

tot*_*tas 107

我通过在ssh-add中使用-K选项在Mac OSX(10.10)上解决了这个问题:

ssh-add -K ~/.ssh/your_private_key
Run Code Online (Sandbox Code Playgroud)

对于macOS 10.12及更高版本,您需要另外编辑您的ssh配置,如下所述:https://github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain

  • 因此这一点:"在Mac OSX(10.10)上"...... (12认同)
  • 这对我不起作用(在OSX 10.12.4上) (5认同)
  • 对于想要永久设置它的人来说,这是一个更好的答案 (3认同)
  • 根据macOS High Sierra上的`man ssh-add`,`ssh-add -K`会将密码保存到钥匙串中,并且在重启后,只需使用`ssh-add -A`,不需要您输入您的密码短语。 (2认同)
  • OP 专门在 ubuntu 上寻求帮助,该帖子被这篇文章所掩盖。 /sf/answers/26071/​​56434/5109177 要求将其转移到 mac 特定线程是否是迂腐?[这些要额外收费吗?:*)] (2认同)

Chr*_*iki 33

只需添加钥匙串,如Ubuntu快速提示中所述, https://help.ubuntu.com/community/QuickTips

什么

而不是不断启动ssh-agent和ssh-add,可以使用keychain来管理你的ssh密钥.要安装钥匙串,您只需单击此处,或使用Synaptic从命令行执行作业或apt-get.

命令行

安装文件的另一种方法是打开终端(Application-> Accessories-> Terminal)并输入:

sudo apt-get install keychain
Run Code Online (Sandbox Code Playgroud)

编辑文件

然后,您应该将以下行添加到$ {HOME} /.bashrc或/etc/bash.bashrc:

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
Run Code Online (Sandbox Code Playgroud)

  • 我很好奇钥匙串是否保存 ssh 密钥密码以及它是如何做到的。这些密码保存在哪里? (4认同)
  • 这个“.”是“source”的别名 (2认同)
  • 什么是“id_dsa”?我搜索过此页面,只看到此答案和[另一个](/sf/answers/2462332841/)中提到这一点,但没有在[原始问题](https://stackoverflow.com/ questions/3466626/how-to-permanently-add-a-private-key-with-ssh-add-on-ubuntu)。这是否只是像“id_rsa”这样的另一个密钥,因为正在设置 2 个密钥? (2认同)

Nik*_*lov 18

我尝试了@Aaron的解决方案,它对我来说不太有用,因为每次我在终端上打开一个新标签时它都会重新添加我的密钥.所以我稍微修改了一下(请注意,我的大多数密钥也受密码保护,因此我不能将输出发送到/ dev/null):

added_keys=`ssh-add -l`

if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
    ssh-add "$HOME/.ssh/my_key"
fi
Run Code Online (Sandbox Code Playgroud)

它的作用是检查ssh-add -l特定键的输出(列出已添加的所有键),如果找不到,则将其添加ssh-add.

现在我第一次打开终端时,我被要求输入私钥的密码,直到我重新启动(或注销 - 我没有检查)我的电脑才会再问.

由于我有一堆密钥,我将输出存储ssh-add -l在变量中以提高性能(至少我猜它会提高性能:))

PS:我在linux上,这段代码转到我的~/.bashrc文件 - 如果你在Mac OS X上,那么我认为你应该把它添加到.zshrc.profile

编辑:正如@Aaron在评论中指出的那样,.zshrc文件是从zshshell中使用的- 所以如果你不使用它(如果你不确定,那么很可能,你正在使用bash),这段代码应该转到您的.bashrc文件.

  • `.zshrc`用于`zsh` shell,我使用它代替`bash`.如果你在Mac OS X上使用`bash`(默认),那么它也会是`.bashrc`. (3认同)

小智 11

在我的情况下,解决方案是:

配置文件的权限应为600. chmod 600 config

正如上面的评论中提到的generalopinion

无需触摸配置文件内容.


Fho*_*lst 5

我使用两个 id_rsa 密钥运行 Ubuntu。(一个个人的工作)。ssh-add 每次都会记住一把钥匙(个人的)而忘记公司的一把。

检查两者之间的区别,我看到我的个人密钥有 400 个权限,而公司一个有 600 个权限。(有 u+w)。从公司密钥(uw 或设置为 400)中删除用户写入权限解决了我的问题。ssh-add 现在记住两个键。


NSh*_*iny 5

在Ubuntu 16.04上,我遇到了同样的问题:某些键是永久添加的,其他键则必须ssh-add在每个会话中执行。我发现,永久添加的密钥位于私钥和公钥中~/.ssh,而每次会话中忘记的密钥在~/.sshdir中只有私钥。因此,解决方法很简单:你应该复制这两个私钥和公钥来~/.ssh执行前ssh-add

PS:据我从Gnome Wiki所了解,我的方法可以使用Gnoome桌面环境中的gnome-keyring工具。因此,仅当您使用Gnome或基于Gnome的DE时,我的方法才可能起作用。

  • 被低估的答案。搜索两个小时后,这解决了我的问题,而无需额外的脚本或包。 (3认同)