输入一次SSH密码
升级前
当我在每台计算机上运行git clone git@...
(使用ssh)时,会出现一个窗口对话框,其中包含一个用于插入SSH密码的文本框,并通过OK确认。 然后在我的系统下次启动之前不再需要密码短语。
升级到13.10后
升级到Ubuntu 13.10后,该窗口不再出现,但终端中显示一条消息:
Enter passphrase for key '/home/username/.ssh/id_rsa':
…每次克隆git存储库时都会出现这种情况。
我怎样才能解决这个问题? 我只想输入一次密码。
更新:似乎是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
问题得到解决。
这个Atlassian文档在Ubuntu 14.04 Server Edition上为我解决了这个问题:
只需将此值添加到.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
登录后,它只需要一次密码并缓存。 您不需要每次都输入它。
0)简短的回答
在开头添加.ssh/config
一行:
AddKeysToAgent yes
并运行git / ssh / …如果还不够,请检查您的ssh版本并检查ssh-agent是否已加载这些说明:
1)检查openssh版本
首先检查你的ssh版本,它必须大于等于7.2 :
ssh -V
2)编辑配置文件
如果是这种情况,只需在开头添加.ssh/config
一行:
AddKeysToAgent yes
3)检查ssh-agent是否已经打开
通常,分发会自动加载ssh-agent。 要检查它,请运行
ps aux | grep -v grep | grep ssh-agent
如果您没有看到任何包含它的行,则需要通过运行来加载它:
eval $(ssh-agent)
请注意,这仅在当前终端上启用代理,因此要在任何地方启用它,您可以尝试在~/.profile
文件中添加此行并重新启动。
此错误的解决方法是将以下内容添加到~/.bashrc
的底部
eval `gnome-keyring-daemon --start`
fish shell的用户可以使用此脚本执行相同的操作。
# content has to be in .config/fish/config.fish # if it does not exist, create the file setenv SSH_ENV $HOME/.ssh/environment function start_agent echo "Initializing new SSH agent ..." ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV echo "succeeded" chmod 600 $SSH_ENV . $SSH_ENV > /dev/null ssh-add end function test_identities ssh-add -l | grep "The agent has no identities" > /dev/null if [ $status -eq 0 ] ssh-add if [ $status -eq 2 ] start_agent end end end if [ -n "$SSH_AGENT_PID" ] ps -ef | grep $SSH_AGENT_PID | grep ssh-agent > /dev/null if [ $status -eq 0 ] test_identities end else if [ -f $SSH_ENV ] . $SSH_ENV > /dev/null end ps -ef | grep $SSH_AGENT_PID | grep -v grep | grep ssh-agent > /dev/null if [ $status -eq 0 ] test_identities else start_agent end end
我用这个:
vim ~/.profile eval `/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh,gpg` export SSH_AUTH_SOCK export GPG_AGENT_INFO
如果您使用azure .ppk文件
只需将其转换为pem并通过简单的步骤添加权限400:
sudo apt-get install putty puttygen /keyname.ppk -O private-openssh -o /aws_key.pem sudo chmod 400 /aws_key.pem ssh -vi aws_key.pem ubuntu@