我有一个受密码保护的私钥,可以通过SSH访问服务器。
我有2台linux(ubuntu 10.04)机器,ssh-add命令的行为在两者中都不同。
在一台机器中,一旦我使用“ssh-add .ssh / identity”并输入我的密码,该密钥就被永久添加,即每次关闭计算机并再次登录时,密钥已经添加。
在另一个中,我必须在每次登录时添加密钥。
据我记忆,我对两者做了同样的事情。唯一的区别是密钥是在永久添加的密钥上创建的。
有没有人知道如何永久地将它添加到另一台机器上?
答案 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
调用-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执行此操作。