输入一次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@