在Ubuntu上用ssh-add永久添加私钥

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

我有2个Linux(Ubuntu 10.04)机器和ssh-add命令的行为是不同的在他们两个。

在一台机器上,一旦我使用“ssh-add .ssh / identity”并input密码,密钥就会永久添加,即每次关机后重新login密钥。

另一方面,我每次login时都要添encryption钥。

据我所知,我在两个方面都做了同样的事情。 唯一的区别是,密钥是在永久添加的密钥上创build的。

有谁知道如何将其永久添加到另一台机器?

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

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

如果你想让计算机上的所有用户使用这个密钥,把这些行放到/etc/ssh/ssh_config并把密钥放在一个可访问的文件夹中。

另外,如果你想设置一个主机的特定密钥,你可以在〜/ .ssh / config中执行以下命令:

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

你需要使用@github而不是@ github.com进行克隆,但是这样做的好处是只有这个密钥才能被使用。

这在Mac OS X Lion下没有回答我的问题。 我最后补充说:

 ssh-add ~/.ssh/id_rsa &>/dev/null 

到我的.zshrc(但.profile也可以),这似乎已经修复它。

(如这里所build议的: http : //geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/ )

我在Mac OSX(10.10)上使用-k选项解决了ssh-add的问题:

 ssh-add -K ~/.ssh/your_private_key 

只需添加钥匙串,如Ubuntu快速提示https://help.ubuntu.com/community/QuickTips

什么

而不是经常启动ssh-agent和ssh-add,可以使用钥匙串来pipe理你的ssh密钥。 要安装钥匙串,你可以点击这里,或者使用Synaptic从命令行执行这个任务或apt-get。

命令行

另一种安装文件的方法是打开terminal(应用程序 – >附件 – >terminal)并input:

 sudo apt-get install keychain 

编辑文件

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

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

我尝试了@Aaron的解决scheme,这对我来说并不合适,因为每当我在terminal中打开一个新选项卡时,它都会重新添加我的密钥。 所以我修改了一下(请注意,我的大多数密钥也是密码保护的,所以我不能只是发送输出到/ 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 (列出所有已添加的键)的输出,如果没有find它,则将其添加到ssh-add

现在我第一次打开我的terminal,我被要求input私钥的密码,直到重新启动(或者注销 – 我没有检查)我的电脑之后,我才再次询问。

由于我有一堆密钥,我将ssh-add -l的输出存储在一个variables中以提高性能(至less我猜测它提高了性能:))

PS:我在Linux上,这个代码到我的~/.bashrc文件 – 如果你在Mac OS X上,那么我认为你应该把它添加到.zshrc.profile

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

在我的情况下,解决scheme是:

configuration文件的权限应该是600. chmod 600 config

正如上述通用观点中所提到的

不需要触摸configuration文件的内容。

在Ubuntu 14.04(也许更早,也许还是),你甚至不需要控制台:

  • 启动seahorse或启动那个你发现寻找“钥匙”的东西
  • 在那里创build一个SSH密钥(或者导入一个)
    • 不需要把密码留空
    • 它是提供给你甚至推公钥到服务器(或更多)
  • 你将最终运行一个ssh-agent,并加载这个密钥,但是被locking
  • 使用ssh将通过代理获取身份(即密钥)
  • 在会话第一次使用时,密码将被检查
    • 而且您可以select在login时自动解锁密钥
    • 这意味着loginvalidation将被用来包装密钥的密码
  • 注意:如果你想转发你的身份(即代理转发),请用-A调用你的ssh或者使其成为默认值
    • 否则,您将无法使用该密钥在稍后login到第三台机器的计算机上进行身份validation

很简单^ _ ^两个步骤

1.yum安装钥匙串

2.将以下代码添加到.bash_profile

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

在“〜/ .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)" 

我使用两个id_rsa键运行Ubuntu。 (一个人工作)。 ssh-add会记住一个密钥(个人密钥),并且每次都忘记这个公司。

检查两者之间的差异,我看到我的个人密钥拥有400个权利,而公司拥有600个权限。 (有u + w)。 删除用户从公司密钥(uw或设置为400)写权利解决了我的问题。 ssh-add现在可以记住两个密钥。

这对我有效。

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