问题描述
我有一个受密码保护的私钥,可以通过SSH访问服务器。
我有2台linux(ubuntu 10.04)机器,ssh-add命令的行为在两者中都不同。
在一台机器上,一旦我使用“ssh-add .ssh /identity”并输入我的密码,密钥就会永久添加,即每次关闭计算机并再次登录时,密钥都已添加。
在另一个中,我必须在每次登录时添加密钥。
据我 memory ,我对两者做了同样的事情。唯一的区别是密钥是在永久添加的密钥上创建的。
有谁知道如何永久地将它添加到其他机器?
最佳解决方法
解决方案是通过在~/.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.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/)
第三种解决方法
我通过对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
第四种方法
只需添加钥匙串,如Ubuntu快速提示https://help.ubuntu.com/community/QuickTips中所述
什么
而不是不断启动ssh-agent和ssh-add,可以使用钥匙串来管理您的ssh密钥。要安装钥匙串,您只需单击此处,或使用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
第五种方法
我尝试了@Aaron的解决方案,它对我来说并不适用,因为每次我在终端上打开一个新标签时,我的按键都会是re-add。所以我修改了一下(注意我的大多数键也是password-protected所以我不能只将输出发送到/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
文件。
第六种方法
在我的情况下,解决方案是:
Permissions on the config file should be 600.
chmod 600 config
正如上面的评论中提到的generalopinion
无需触摸配置文件内容。
第七种方法
我在Ubuntu 16.04上遇到了同样的问题:一些密钥是永久添加的,对于其他人我必须在每个会话中执行ssh-add。我发现永久添加的密钥都有私钥和公钥,位于〜/.ssh,每个会话中忘记的密钥只有〜/.ssh目录中的私钥。因此解决方案很简单:在执行ssh-add之前,您应该将私钥和公钥都复制到〜/.ssh。
第八种方法
在Ubuntu 14.04上(可能更早,可能还在)你甚至不需要控制台:
-
启动
seahorse
或启动您找到的搜索”key”的东西 -
在那里创建一个SSH密钥(或导入一个)
-
无需将密码留空
-
它甚至可以将公钥推送到服务器(或更多)
-
-
你将最终运行ssh-agent并加载此密钥,但已锁定
-
使用
ssh
将通过代理获取身份(即密钥) -
在会话期间首次使用时,将检查密码短语
-
并且您可以选择在登录时自动解锁密钥
-
这意味着登录身份验证将用于包装密钥的密码
-
-
注意:如果您想转发您的身份(即agent-forwarding),请使用
-A
调用您的ssh
或将其设为默认值-
否则,您无法在稍后登录到第三台计算机的计算机上使用该密钥进行身份验证
-
第九种方法
在”~/.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安装钥匙串
2.添加以下代码到.bash_profile
/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh