How to permanently add a private key with ssh-add on Ubuntu?
我有一个私钥,有密码保护,可以通过ssh访问服务器。
我有2台Linux(Ubuntu10.04)机器,ssh add命令的行为在这两台机器中都是不同的。
在一台机器中,一旦我使用了"ssh add.ssh/identity"并输入了我的密码,这个密钥就被永久添加,即每次我关闭计算机并再次登录时,这个密钥就已经添加了。
在另一个系统中,每次登录时都必须添加密钥。
据我所知,我在这两个方面都做了同样的事情。唯一的区别是,密钥是在永久添加的密钥上创建的。
有人知道如何将它永久地添加到另一台机器上吗?
解决方案是通过将密钥文件添加到您的
1 2 | IdentityFile ~/.ssh/gitHubKey IdentityFile ~/.ssh/id_rsa_buhlServer |
如果在~/.ssh目录中没有"config"文件,那么应该创建一个。它不需要根权限,所以简单地说:
1 | nano ~/.ssh/config |
…并根据您的要求输入上述行。
为此,文件需要有chmod 600。您可以使用命令
如果您希望计算机上的所有用户使用密钥,请将这些行放入
此外,如果要将密钥设置为特定于一个主机,可以在~/.ssh/config中执行以下操作:
1 2 3 4 | Host github HostName github.com User git IdentityFile ~/.ssh/githubKey |
您将需要使用@github而不是@github.com进行克隆,但这样做的好处是只尝试使用此密钥。
在Mac OS X Lion下,这并不能回答我同样的问题。我最后补充道:
1 | ssh-add ~/.ssh/id_rsa &>/dev/null |
对于我的.zshrc(但是.profile也可以),它似乎已经修复了它。
(此处建议:http://geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/)
我在mac osx(10.10)上通过使用ssh-add的-k选项解决了这个问题:
1 | ssh-add -K ~/.ssh/your_private_key |
对于MacOS 10.12及更高版本,您需要另外编辑ssh配置,如下所述:https://github.com/jirsbek/ssh-keys-in-macos-塞拉-keychain
只需添加钥匙链,如Ubuntu快速提示中所述。https://help.ubuntu.com/community/quicktips网站
什么
不必经常启动ssh agent和ssh add,而是可以使用keychain来管理您的ssh密钥。要安装keychain,您只需单击此处,或者使用synaptic执行该任务,或者从命令行中获取apt。
命令行
安装文件的另一种方法是打开终端(应用程序->附件->终端)并键入:
1 | sudo apt-get install keychain |
编辑文件
然后,您应该将以下行添加到您的$home/.bashrc或/etc/bash.bashrc中:
1 2 | keychain id_rsa id_dsa . ~/.keychain/`uname -n`-sh |
我尝试了@aron的解决方案,但它不太适合我,因为每次我在终端中打开一个新标签时,它都会重新添加我的密钥。所以我对它做了一点修改(请注意,我的大多数密钥也是受密码保护的,所以我不能只将输出发送到/dev/null):
1 2 3 4 5 | added_keys=`ssh-add -l` if [ ! $(echo $added_keys | grep -o -e my_key) ]; then ssh-add"$HOME/.ssh/my_key" fi |
它的作用是检查
现在,我第一次打开终端时,我被要求输入我的私人密钥的密码,在我重新启动(或注销-我没有检查)我的计算机之前,我不会再被要求输入密码。
因为我有很多键,所以我将
PS:我在Linux上,这段代码被放到了我的
编辑:正如@aron在评论中指出的那样,
在我的案例中,解决方案是:
Permissions on the config file should be 600.
chmod 600 config
如上述评论所述一般意见
无需触摸配置文件内容。
我在Ubuntu16.04上也遇到了同样的问题:一些密钥是永久添加的,而另一些密钥我必须在每个会话上执行
在Ubuntu 14.04(可能更早,也可能更早)上,您甚至不需要控制台:
- 启动
seahorse 或启动你找到的搜索"钥匙"的东西。 - 在那里创建一个ssh密钥(或导入一个)。
- 无需将密码留空
- 它甚至可以将公钥推送到服务器(或更多服务器)上。
- 最后,您将运行一个ssh代理,并加载该密钥,但该密钥被锁定。
- 使用
ssh 将通过代理获取身份(即密钥)。 - 在会话期间首次使用时,将检查密码短语
- 您可以选择在登录时自动解锁密钥
- 这意味着登录验证将用于包装密钥的密码短语。
- 注意:如果您想转发您的身份(即代理转发),请使用
-A 调用您的ssh ,或将其设为默认值。- 否则,您无法在稍后登录到第三台计算机的计算机上使用该密钥进行身份验证
这对我有用。
1 2 | ssh-agent /bin/sh ssh-add /path/to/your/key |
我使用两个ID_rsa密钥(一个用于工作的个人密钥)运行Ubuntu。ssh-add会记住一个密钥(个人密钥),每次都会忘记一个公司密钥。
看看这两者的区别,我发现我的个人钥匙有400个权限,而公司一号有600个权限。(有U+W)。从公司密钥(U-W或设置为400)中删除用户写权限,解决了我的问题。ssh-add现在记住这两个键。
非常简单的两步
1.yum安装钥匙链
2.在.bash_配置文件中添加以下代码
1 2 | /usr/bin/keychain $HOME/.ssh/id_dsa source $HOME/.keychain/$HOSTNAME-sh |
在"~/.bashrc"中添加以下行为我解决了这个问题。我正在使用Ubuntu 14.04桌面。
1 2 3 4 | 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)" |
对于那些使用fish shell的用户,可以使用以下函数,然后在~/.config/fish/config.fish中调用它。它将把以id_rsa开头的所有密钥加载到
1 2 3 4 5 6 7 8 9 10 11 12 | # 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 |
如果您希望在打开终端时自动启动