ssh密钥ssh-agent bash和ssh-add


28

我是ssh键的新手。谁能解释ssh-agent bash和的ssh-add工作原理?

我需要在将来了解其内部。


您是否曾经尝试过以下任何一种方式在Google热门搜索中排名第一?
丹尼尔·贝克

是的,我做到了。我没有得到任何有用的信息。我的坏人
maneeshshetty

Answers:


44

一个代理是保持你的钥匙在内存中,这样你只需要解锁程序一次,而不是每一次,。ssh-agent对SSH密钥执行此操作。

启动ssh-agent的常用方法是:

  • eval `ssh-agent`–这将在后台运行代理,并为当前 shell实例设置适当的环境变量。

    ssh-agent,不带任何参数启动时,将输出命令以供您的shell解释。)

  • exec ssh-agent bash–启动外壳程序的实例bash,替换当前实例。

    (使用一个或多个参数,ssh-agent不会输出任何东西,但是会启动指定的命令:在这种情况下,是bashshell,但从技术上讲,它可以是任何东西。)

    有时首选第二种方法,因为当您关闭终端窗口时,它会自动杀死ssh-agent。(以开头时eval,代理将继续运行,但无法访问。)

但是,这只会启动一个空代理。为了使它真正有用,您需要使用ssh-add,它会解锁您的密钥(通常是~/.ssh/id_*)并将其加载到代理中,从而使它们可用于sshsftp连接。


3
有没有一种方法可以一次跨多个bash会话启动ssh-agent?
阿西姆(Asim)'18年

9

此外,您可能想在会话开始时添加一些密钥。

编辑~/.bashrc文件,然后添加:

ssh-add &>/dev/null || eval `ssh-agent` &>/dev/null  # start ssh-agent if not present
[ $? -eq 0 ] && {                                     # ssh-agent has started
ssh-add ~/.ssh/your_private.key1 &>/dev/null        # Load key 1
ssh-add ~/.ssh/your_private.key2 &>/dev/null        # Load key 2
}

检查您的钥匙 ssh-add -l

您可以使用停止当前的ssh-agent会话 ssh-agent -k

关于ssh-agent和.bashrc的一些知识是不要加载太多密钥。ssh守护程序的默认尝试次数限制为6。可以/etc/ssh/sshd_config使用该MaxAuthTries值进行修改。


1
ssh-add用“&” 启动时的私钥密码怎么办?您是否假设私钥文件不受保护?
卢西亚诺

上面的代码两次要求输入密码,一次是在检查ssh-agent是否可用时,一次是在加载私钥时。
Tapan Chandra
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.