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

时间:2010-08-12 10:13:38

标签: ubuntu ssh key ssh-agent

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

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

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

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

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

有没有人知道如何永久地将它添加到另一台机器上?

13 个答案:

答案 0 :(得分:540)

解决方案是通过将密钥文件添加到~/.ssh/config文件中来强制保留密钥文件:

IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer

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

nano ~/.ssh/config

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

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

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

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

Host github
    HostName github.com
    User git
    IdentityFile ~/.ssh/githubKey

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

答案 1 :(得分:106)

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

ssh-add ~/.ssh/id_rsa &>/dev/null

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

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

答案 2 :(得分:98)

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

ssh-add -K ~/.ssh/your_private_key

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

答案 3 :(得分:29)

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

<强>什么

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

命令行

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

sudo apt-get install keychain

修改档案

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

keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh

答案 4 :(得分:17)

我尝试了@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

这样做是它检查ssh-add -l的输出(列出了已添加的所有键),如果它没有找到它,那么它会将其添加到{{ 1}}。

现在我第一次打开终端时,我要求提供私钥的密码,直到我重新启动(或退出 - 我还没有检查)我的计算机之后我再也没有问过

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

PS:我在linux上,这段代码转到我的ssh-add -l文件 - 如果您使用的是Mac OS X,那么我认为您应该将其添加到~/.bashrc或{{1 }}

编辑: 正如@Aaron在评论中所指出的那样,.zshrc shell中使用了.profile文件 - 所以如果你不使用它(如果你不确定,那么大多数可能,您正在使用.zshrc代替),此代码应转到您的zsh文件。

答案 5 :(得分:11)

就我而言,解决方案是:

  

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

正如上面的评论所述  generalopinion

无需触摸配置文件内容。

答案 6 :(得分:4)

我在Ubuntu 16.04上遇到了相同的问题:某些键被永久添加,而另一些则必须在每个会话中执行ssh-add。我发现,永久添加的密钥在~/.ssh中都具有私钥和公用密钥,而在每个会话中被遗忘的密钥在~/.ssh目录中仅具有私钥。因此解决方案很简单:您应在执行~/.ssh之前将 私钥和公钥都复制到ssh-add

答案 7 :(得分:3)

在Ubuntu 14.04上(可能更早,可能还在)你甚至不需要控制台:

  • 启动seahorse或启动您搜索“key”
  • 的内容
  • 在那里创建一个SSH密钥(或导入一个)
    • 无需将密码留空
    • 甚至可以将公钥推送到服务器(或更多)
  • 你最终会运行一个ssh-agent并加载此密钥,但已锁定
  • 使用ssh将通过代理
  • 获取身份(即密钥)
  • 在会话期间首次使用时,将检查密码
    • 您可以选择在登录时自动解锁密钥
    • 这意味着登录身份验证将用于包装密钥的密码短语
  • 注意:如果您想转发您的身份(即代理转发),请使用ssh调用-A或将其设为默认
    • 否则您无法在稍后登录到第三台计算机的计算机上使用该密钥进行身份验证

答案 8 :(得分:2)

在&#34;〜/ .bashrc&#34;中添加以下行:为我解决了这个问题。我使用的是Ubuntu 14.04桌面。

eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"

答案 9 :(得分:2)

非常简单^ _ ^两步

1.yum安装钥匙串

2.添加以下代码到.bash_profile

/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh

答案 10 :(得分:2)

我使用两个id_rsa键运行Ubuntu。 (一个人工作)。 ssh-add会记住一个密钥(个人密钥)并且每次忘记公司密钥。

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

答案 11 :(得分:2)

这对我有用。

ssh-agent /bin/sh
ssh-add /path/to/your/key

答案 12 :(得分:1)

对于使用Fish shell的用户,您可以使用以下函数,然后在〜/ .config / fish / config.fish中调用它。它会将以 id_rsa 开头的所有密钥加载到ssh-agent

# Load all ssh keys that start with "id_rsa"
function loadsshkeys
  set added_keys (ssh-add -l)
   for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
    if test ! (echo $added_keys | grep -o -e $key)
      ssh-add "$key"
    end
  end
end

# Call the function to run it.
loadsshkeys

如果您想在打开终端时自动启动ssh-agent,可以使用tuvistavie/fish-ssh-agent执行此操作。