如何设置 KDE、KWallet 和 ssh,这样系统就不会要求我输入 ssh 密码?

如何设置 KDE、KWallet 和 ssh,这样系统就不会要求我输入 ssh 密码?

我已设置 ssh 密钥,并且可以在 ksshaskpass 下的 KWalletManager 中看到我的密钥。我怎样才能得到它,这样我就不会被要求输入我的 ssh 密码,例如。每次我在 Git 中做某事时。 (它说:“输入密钥的密码......”)

我想要的是我的 KDE 登录是唯一一次要求我输入密码(如 Cinnamon 和 Gnome 中)。我想这应该会导致 KWallet 和 ssh 之间进行某种交互,以便我的密码自动输入到 ssh 中。我尝试搜索信息,但找不到 Kubuntu 的分步解决方案。我需要做什么?

答案1

虽然说明这里大致上是正确的,我必须做出一些改变才能使其发挥作用。

第 1 步“登录时自动解锁 KDE 钱包”已在 Kubuntu 22.10 中完成。对我来说,步骤 2“使用 KDE 钱包存储 ssh 密钥密码”需要修改,而步骤 3“使用 KDE 钱包存储 Git 凭证”则不需要(使用 ssh 的 Git 没有它也可以正常工作):

  1. 我做了一个文件~/.local/bin/delayed_ssh_add

  2. 我将以下几行放入该文件中:

#!/bin/bash
sleep 15
/usr/bin/ssh-add -k ~/.ssh/YOUR_SSH_KEY

您可以使用 添加任意数量的 ssh 密钥/usr/bin/ssh-add -k ...。请注意,我发现我必须使用 ssh 密钥的完整路径,/home而不是使用~我的主目录。

  1. 我使文件可执行

  2. 我做了一个文件~/.config/autostart/delayed-ssh-add.desktop

  3. 我把:

[Desktop Entry]
Comment[en_NZ]=
Comment=
Exec=/home/YOUR_HOME_FOLDER/.local/bin/delayed_ssh_add
GenericName[en_NZ]=
GenericName=
MimeType=
Name[en_NZ]=delayed-ssh-add
Name=delayed-ssh-add
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=none
X-KDE-SubstituteUID=false
X-KDE-Username=
  1. 我做了一个文件~/.config/environment.d/ssh_askpass.conf

  2. 我把:

SSH_ASKPASS='/usr/bin/ksshaskpass'
SSH_ASKPASS_REQUIRE=prefer

为了解释上述内容,我所做的更改是在延迟 15 秒后添加 ssh 密钥,而不是立即添加。我推测这是因为 KWallet 或相关服务在自动启动应用程序开始执行后启动,因为我还必须延迟启动 Skype(我还可以在 KWalletManager 中看到凭据)。

如果 Python 编码人员感兴趣:要在 Python 项目中获取 requests.txt 中的 GitHub 要求而不提示输入密码,我必须使用以下形式而不是 https:

git+ssh://[email protected]/anntzer/defopt@main#egg=defopt

答案2

乌班图工作室 23.04KDE等离子我用的是系统方法来自@Polymerase 提到的@lightsing。

还带有ssh > 7.2您可以通过指示 ssh 客户端.ssh/config始终将密钥添加到正在运行的 ssh 代理,因此无需ssh-add。这使得事情变得更容易。这里有一个线程:如何仅在需要时才要求输入 SSH 密钥密码?

这个 appoach 对我来说适用于终端上的 ssh 连接、github 和 Apache Netbeans。

安装 ssh-agent 作为 systemd 服务

  • 创建文件,~/.config/systemd/user/ssh-agent.service因为 ssh-agent 是用户隔离的
[Unit]
Description=SSH key agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target
  • 创建~/.config/environment.d/ssh_auth_socket.conf并添加
SSH_AUTH_SOCK="${XDG_RUNTIME_DIR}/ssh-agent.socket"
  • 添加AddKeysToAgent yes~/.ssh/config
  • 执行chmod 600 ~/.ssh/configchown $USER ~/.ssh/config避免来自 ssh 的安全警告
  • 启用并启动服务:systemctl --user enable --now ssh-agent

安装 ksshaskpass

sudo apt install ksshaskpass

添加环境变量

创建~/.config/environment.d/ssh_askpass.conf并添加

SSH_ASKPASS='/usr/bin/ksshaskpass'
SSH_ASKPASS_REQUIRE=prefer

注销并重新登录

要激活所有环境变量,请注销并重新登录。从现在开始,KWallet 应该管理密码。

答案3

@mcarans 的答案非常有效。上面的步骤 6(ksshaskpass通过创建将 SSH pinentry 设置为~/.config/environment.d/ssh_askpass.conf)可以通过以下方式简化:

# check
update-alternatives --list ssh-askpass
# /usr/bin/kssaskpass

# set if needed
update-alternatives --force --verbose --set ssh-askpass /usr/bin/kssaskpass

答案中没有描述,但是您必须确保ssh-agent已启动。你经常会看到eval $(ssh-agent)建议的命令。但我发现这样比较方便如何启动并使用 ssh-agent 作为 systemd 服务?

事实上,该ssh-agent服务可能已经启用并启动。至少对于 Debian 12、KDE ​​来说是这样。 ssh-agent 已经在运行,无需我执行任何操作。

相关内容