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

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

我尝试在通过 ssh 登录到我的服务器时自动执行以下命令:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

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

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

还有其他建议吗?

服务器运行的是 Ubuntu LTS

答案1

您可以尝试添加这个:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

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

正如评论中所说,也许你会不是不想在远程主机上运行代理,而是在你正在工作的机器上运行代理,然后使用

ssh -A remote-host

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

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

答案2

另一种方法是将其添加到 .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

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

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

答案3

另一种方法是使用 Funtoo 的钥匙链.然后你可以将这一行代码粘贴到你的 bash shell 中:

eval $(keychain --eval id_rsa)

它会执行相同的操作(启动 ssh 代理等),但也不会为每个子 shell 运行 ssh-agent 进程。相反,它会查找您拥有的“已在运行”的实例,并将您连接到这些实例。

答案4

另请记住,如果您有 ssh 连接保持活动,则需要先删除现有连接文件才能-A生效。删除 中的任何 ssh 连接文件/tmp/[host]

相关内容