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

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

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

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

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

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


当前回答

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

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

其他回答

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

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

只需要添加钥匙链,就像Ubuntu快速提示中提到的那样 https://help.ubuntu.com/community/QuickTips

What

不需要经常启动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现在记住两个键。

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

start seahorse or launch that thing you find searching for "key" create an SSH key there (or import one) no need to leave the passphrase empty it is offered to you to even push the public key to a server (or more) you will end up with an ssh-agent running and this key loaded, but locked using ssh will pickup the identity (i.e. key) through the agent on first use during the session, the passphrase will be checked and you have the option to automatically unlock the key on login this means the login auth will be used to wrap the passphrase of the key note: if you want to forward your identity (i.e. agent-forwarding) invoke your ssh with -A or make that the default otherwise you can't authenticate with that key on a machine you login to later to a third machine

我在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