在 Ubuntu 上使用 GNOME 桌面时,如果我使用 OpenSSH 客户端连接到另一台计算机(从 gnome 终端运行),我会收到一个图形弹出窗口,要求输入我的私钥密码。之后我不再需要输入密码,因为它已被 SSH 代理缓存。
在 KDE 下它不起作用——当我从 konsole 启动 ssh 时,每次都会收到一个要求输入密码的文本提示,即使 ssh-agent 正在运行。
如果我从终端运行 ssh-add,那么我就可以在终端上输入密码,它将被 ssh-agent 存储,并且我不会再收到任何密码提示,而如果我在 KRunner 图形命令行(“运行”对话框)中运行 ssh-add,那么我会得到一个具有相同行为的图形提示。问题是每次登录桌面时我都必须记住运行 ssh-add。
我怎样才能让 ssh 在 KDE 下的行为与在 GNOME 上的行为相同 - 第一次需要密码时,弹出一个图形对话框并将密码存储在代理中。
我已经安装了 ksshaskpass,但是它并没有改变任何东西。
答案1
我不知道其内部原理,所以无法解释为什么它在 GNOME 中可以运行而在 KDE 中却不运行,但我可以提出一个解决方案。
在您的中定义如下函数~/.bashrc
:
ssh() {
if ! ssh-add -l &>/dev/null; then
ssh-add </dev/null &>/dev/null
fi
command ssh "$@"
}
即,如果代理尚未存储密钥(! ssh-add -l
),则使用来自的输入来调用它/dev/null
:这是为了确保ssh-add
没有终端,并强制使用 GUI 窗口询问密码。
您可以设置SSH_ASKPASS
环境变量来指向不同的应用程序来询问密码。