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)
一种替代方法是使用 Funtoo 的Keychain。然后你可以将这一行代码粘贴到你的 bash shell 中:
eval $(keychain --eval id_rsa)
Run Code Online (Sandbox Code Playgroud)
这会执行相同的操作(启动 ssh 代理等),同时也不为每个子 shell 运行 ssh 代理进程。相反,它会查找您拥有的“已经运行”的实例并将您附加到它们。