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

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

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

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

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

有谁知道如何永久地将它添加到其他机器?


#1楼

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

我尝试了@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壳-所以,如果你不使用(如果你不知道,那么最有可能的,你正在使用bash代替) ,此代码应该转到.bashrc文件。


#3楼

在我的情况下,解决方案是:

配置文件的权限应为600. chmod 600 config

正如上面的评论中提到的generalopinion

无需触摸配置文件内容。


#4楼

在Ubuntu 14.04上(可能更早,可能还在)你甚至不需要控制台:

  • 开始seahorse或发现你发现搜索“关键”的东西
  • 在那里创建一个SSH密钥(或导入一个)
    • 无需将密码留空
    • 它甚至可以将公钥推送到服务器(或更多)
  • 你最终会运行一个ssh-agent并加载这个密钥,但是已锁定
  • 使用ssh将通过代理获取身份(即密钥)
  • 在会话期间首次使用时,将检查密码短语
    • 并且您可以选择在登录时自动解锁密钥
    • 这意味着登录身份验证将用于包装密钥的密码
  • 注意:如果您想转发您的身份(即代理转发),请使用-A调用您的ssh或将其设为默认值
    • 否则,您无法在稍后登录到第三台计算机的计算机上使用该密钥进行身份验证

#5楼

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


#6楼

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

#7楼

非常简单^ _ ^两个步骤

1.yum安装钥匙串

2.添加以下代码到.bash_profile

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

#8楼

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

什么

而不是不断启动ssh-agent和ssh-add,可以使用keychain来管理你的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

#9楼

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

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


#10楼

解决方案是通过在~/.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

当您有许多身份,服务器不拒绝您,因为您首先尝试了错误的身份时,这具有优势。 只会尝试特定的身份。


#11楼

这对我有用。

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

#12楼

对于使用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来执行此操作。


#13楼

我在Ubuntu 16.04上遇到了同样的问题:一些密钥是永久添加的,对于其他人我必须在每个会话上执行ssh-add 。 我发现永久添加的密钥都有私钥和公钥,位于~/.ssh ,每个会话中忘记的密钥只有~/.ssh目录中的~/.ssh 。 因此,解决方法很简单:你应该复制私人和公共密钥~/.ssh执行前ssh-add

Logo

更多推荐