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

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

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

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

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

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

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

529992 次浏览

一个解决方案是强制永久保存密钥文件,将它们添加到~/.ssh/config文件中:

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

如果在~/. conf文件中没有'config'文件。SSH目录,那么您应该创建一个。它不需要根权限,所以很简单:

nano ~/.ssh/config

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

要做到这一点,文件需要chmod 600。您可以使用命令chmod 600 ~/.ssh/config

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

此外,如果您想设置特定于一台主机的键,可以在~/中执行以下操作。ssh / config:

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

当您有许多身份时,这样做具有优势,服务器不会因为您首先尝试了错误的身份而拒绝您。只会尝试特定的身份。

在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/)

我尝试了@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的输出(其中列出了已添加的所有键),如果没有找到它,则将它与ssh-add一起添加。

现在我第一次打开我的终端,我被要求提供我的私钥密码,直到我重新启动(或注销-我没有检查)我的电脑。

因为我有一堆键,我将ssh-add -l的输出存储在一个变量中以提高性能(至少我猜它提高了性能:))

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

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

对我来说,解决方案是:

配置文件的权限应该是 600。chmod 600 config

正如 generalopinion 的评论

无需修改配置文件内容。

在Ubuntu 14.04(也许更早,也许仍然如此)你甚至不需要控制台:

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

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

ssh-add -K ~/.ssh/your_private_key

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

在“~/.”中添加以下行。Bashrc“为我解决了这个问题。我使用的是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)"

非常简单的^_^两步

1.Yum安装keychain

2.将下面的代码添加到.bash_profile

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

只需添加钥匙链,参考Ubuntu快速提示 # EYZ0 < / p >

什么

不需要经常启动ssh-agent和ssh-add,可以使用keychain来管理ssh密钥。要安装keychain,只需点击这里,或使用Synaptic来完成工作或从命令行apt-get。

命令行

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

sudo apt-get install keychain

编辑文件

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

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

我使用两个id_rsa密钥运行Ubuntu。(工作用一个)。 Ssh-add每次都会记住一个密钥(个人密钥),而忘记公司密钥 查看两者之间的差异,我发现我的个人密钥有400个权限,而公司密钥有600个权限。(u + w)。 从公司密钥中删除用户写入权限(u-w或设置为400)解决了我的问题。Ssh-add现在记住两个键

这对我很管用。

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

对于那些使用Fish shell的人,你可以使用下面的函数,然后在~/.config/fish/config.fish或在~/.config/fish/conf.d/loadsshkeys.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在你打开终端时自动启动,你可以使用danhper / fish-ssh-agent来做到这一点。

我在Ubuntu 16.04上遇到了同样的问题:一些键是永久添加的,对于其他键,我必须在每次会话中执行ssh-add。我发现被永久添加的密钥同时拥有位于~/.ssh中的私钥和公钥,而在每次会话中被遗忘的密钥只有位于~/.ssh目录中的私钥。所以解决方案很简单:在执行ssh-add之前,应该将这两个的私钥和公钥复制到~/.ssh

据我从Gnome维基中了解到的,我的方法工作得益于Gnome -keyring工具,这是Gnome桌面环境的一部分。因此,我的方法可能只适用于使用Gnome或基于Gnome的DE。