通过 SSH 登录时运行 ssh-agent 和 ssh-add 的直接方法?

Cli*_*ote 53 ubuntu ssh bash bashrc ssh-keygen

当我通过 ssh 登录到我的服务器时,我试图让以下命令自动执行:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

我的 ssh 密钥有一个密码短语,每次登录输入一次就可以了。

我尝试将它放在我的 .bashrc 文件中,但是我相信 ssh-agent 会启动一个新的 bash 会话。当我在我的 .bashrc 中有这个后尝试登录时,它卡住了,我必须输入“退出”才能看到“输入密码以解锁密钥”提示

还有其他建议吗?

服务器正在运行 Ubuntu LTS

Tob*_*ker 70

您可以尝试添加以下内容:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

这样ssh-agent就不会启动一个新的 shell,它只是在后台启动自己并输出 shell 命令来设置适当的环境变量。

正如评论说,也许你希望在所有远程主机上运行的代理,而是在包装盒上您工作和使用

ssh -A remote-host
Run Code Online (Sandbox Code Playgroud)

将本地 ssh 代理的服务转发到远程主机。

出于安全原因,您应该只对由可信赖的人运行的主机使用代理转发,但这比任何时候都远程运行完整的代理要好。


小智 12

另一种选择是将其添加到您的 .bashrc 中。这与 Erik 的答案具有相同的优点(确保单个实例),但不需要额外的包。

# SSH Agent should be running, once
runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
if [ $runcount -eq 0 ]; then
    echo Starting SSH Agent
    eval $(ssh-agent -s)
fi
Run Code Online (Sandbox Code Playgroud)

如果未加载至少 1 个密钥,则会运行 ssh-add 并将密钥超时设置为 1 天:

ssh-add -l &>/dev/null
if ! [ "$?" == 0 ]; then
     echo Adding keys...
     ssh-add -t 1d
fi
Run Code Online (Sandbox Code Playgroud)


Eri*_*sty 9

一种替代方法是使用 Funtoo 的Keychain。然后你可以将这一行代码粘贴到你的 bash shell 中:

eval $(keychain --eval id_rsa)
Run Code Online (Sandbox Code Playgroud)

这会执行相同的操作(启动 ssh 代理等),同时也不为每个子 shell 运行 ssh 代理进程。相反,它会查找您拥有的“已经运行”的实例并将您附加到它们。