升级前
当我在每次重启计算机时运行git clone git@...
一次(使用 ssh)时,会出现一个窗口对话框,其中包含一个用于插入我的 SSH 密码的文本框,然后单击“确定”进行确认。然后,直到下次启动系统时,密码就不再需要了。
升级到 13.10 后
升级到 Ubuntu 13.10 后,该窗口不再出现,但终端中会出现一条消息:
Enter passphrase for key '/home/username/.ssh/id_rsa':
...每次克隆 git 存储库时都会出现这种情况。
我该如何解决这个问题?我只想输入一次密码。
答案1
更新:似乎是 13.10 的一个错误:
https://bugs.launchpad.net/ubuntu/+source/libpam-ssh/+bug/1247169
无论如何,运行以下命令可以解决我的问题:
怎么修
我通过输入以下命令解决了这个问题:
$ ssh-agent bash
这将创建一个新的 bash 进程,允许您添加私钥。添加新私钥时,系统将仅提示您输入一次密码。
进而:
$ ssh-add /home/username/.ssh/id_rsa
Enter passphrase for /home/username/.ssh/id_rsa:
Identity added: /home/username/.ssh/id_rsa (/home/username/.ssh/id_rsa)
...username
您的用户名在哪里。您可以使用变量执行相同操作$USER
:
$ ssh-add /home/$USER/.ssh/id_rsa
或者,仅~
用于您的主目录。
$ ssh-add ~/.ssh/id_rsa
问题已经解决。
答案2
简短回答
使用添加密钥到代理.ssh/config
并在开头添加以下内容:
AddKeysToAgent yes
并运行 git/ssh/... 如果这还不够,请检查你的 ssh 版本并检查 ssh-agent 是否按照以下说明加载:
1)检查openssh版本
首先检查你的 ssh 版本,必须是大于或等于 7.2:
ssh -V
2)编辑配置文件
如果是这种情况,只需.ssh/config
在开头添加一行:
AddKeysToAgent yes
其他选项包括no
(默认)yes
、confirm
(可选后跟时间间隔)ask
或时间间隔。
3)检查ssh-agent是否已经打开
通常发行版会自动加载 ssh-agent。要检查它,请运行
ps aux | grep -v grep | grep ssh-agent
如果您没有看到任何包含它的行,则需要通过运行以下命令来加载它:
eval $(ssh-agent)
请注意,这仅在当前终端上启用代理,因此要在任何地方启用它,您可以尝试在文件中添加此行~/.profile
并重新启动。
答案3
本 Atlassian 文档(archive.org 备份)在 Ubuntu 14.04 服务器版本上为我修复了这个问题:
只需将这些值添加到您的.bashrc
文件中:
SSH_ENV=$HOME/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
登录后,只需输入一次密码并缓存。您无需每次都输入密码。
答案4
我花了很长时间才让它在 WSL2 Ubuntu 20.04 上运行。最后,我们需要在生成新控制台时启动 ssh-agent,但不要加载密钥。首次使用时加载密钥并使用AddKeysToAgent
。
~/.bashrc
在或的末尾添加以下内容~/.zshrc
:
SSH_ENV="$HOME/.ssh/agent-environment"
function start_agent {
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
请注意,
/usr/bin/ssh-add;
这里故意省略了,与原始脚本。
并在文件末尾添加以下内容~/.ssh/config
:
Host *
AddKeysToAgent yes