我已设置 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 没有它也可以正常工作):
我做了一个文件
~/.local/bin/delayed_ssh_add
我将以下几行放入该文件中:
#!/bin/bash
sleep 15
/usr/bin/ssh-add -k ~/.ssh/YOUR_SSH_KEY
您可以使用 添加任意数量的 ssh 密钥/usr/bin/ssh-add -k ...
。请注意,我发现我必须使用 ssh 密钥的完整路径,/home
而不是使用~
我的主目录。
我使文件可执行
我做了一个文件
~/.config/autostart/delayed-ssh-add.desktop
我把:
[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=
我做了一个文件
~/.config/environment.d/ssh_askpass.conf
我把:
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.04和KDE等离子我用的是系统方法来自@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/config
并chown $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 已经在运行,无需我执行任何操作。