当我通过 ssh 登录到我的服务器时,我试图让以下命令自动执行:
ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa
我的 ssh 密钥有一个密码,每次登录一次就可以了。
我尝试将它放在我的 .bashrc 文件中,但是我相信 ssh-agent 会启动一个新的 bash 会话。当我在 .bashrc 中有此内容后尝试登录时,它卡住了,我必须输入“退出”才能看到“输入密码以解锁密钥”提示
还有其他建议吗?
服务器正在运行 Ubuntu LTS
当我通过 ssh 登录到我的服务器时,我试图让以下命令自动执行:
ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa
我的 ssh 密钥有一个密码,每次登录一次就可以了。
我尝试将它放在我的 .bashrc 文件中,但是我相信 ssh-agent 会启动一个新的 bash 会话。当我在 .bashrc 中有此内容后尝试登录时,它卡住了,我必须输入“退出”才能看到“输入密码以解锁密钥”提示
还有其他建议吗?
服务器正在运行 Ubuntu LTS
您可以尝试添加以下内容:
这种方式
ssh-agent
不会启动一个新的 shell,它只是在后台启动自己并吐出 shell 命令来设置适当的环境变量。正如评论中所说,也许您根本不想在远程主机上运行代理,而是在您正在使用的机器上运行代理,并使用
将本地 ssh 代理的服务转发到远程主机。
出于安全原因,您应该只对由值得信赖的人运行的主机使用代理转发,但这比随时远程运行完整的代理要好。
另一种选择是将其添加到您的 .bashrc 中。这与 Erik 的回答(确保单个实例)具有相同的优势,但不需要额外的包。
如果没有加载至少 1 个密钥,则运行 ssh-add 并将密钥超时设置为 1 天:
一种替代方法是使用 Funtoo 的Keychain。然后你可以将这个单行代码粘贴到你的 bash shell 中:
这做同样的事情(启动 ssh 代理等),同时也不为每个子 shell 运行 ssh-agent 进程。相反,它会查找您拥有的“已经运行”的实例并将您附加到它们。
另外请记住,如果您有 ssh 连接保持活动,则需要在
-A
生效之前删除现有的连接文件。删除/tmp/[host]
.