it-swarm.cn

每次我推送到Bitbucket时如何避免被询问密码

我在 本指南 的帮助下设置了ssh内容,它过去工作良好(我可以运行hg Push而无需输入密码)。考虑到我仍在使用相同的主目录,从那时到现在可能发生了什么。

$ cat .hg/hgrc 
[paths]
default = ssh://[email protected]/tshepang/bloog

$ hg Push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://[email protected]/tshepang/bloog
searching for changes
...
238
tshepang

您需要使用ssh代理。简短答案:尝试

$ ssh-add

在推之前。在询问时提供您的密码。

如果您尚未运行ssh代理,则会收到以下消息:

Could not open a connection to your authentication agent.

在这种情况下,您可以启动一个并由此设置环境

eval $(ssh-agent)

然后重复ssh-add命令。

值得一看 ssh代理手册页

363
jmtd

解决这个问题的一种方法是使用ssh-agentssh-add

$ exec ssh-agent bash
$ ssh-add
Enter passphrase for ~/.ssh/id_rsa: 

此后,将为当前会话保存密码。不会再被问到。

48
stefano

我使用 Keychain 来管理ssh密钥。它也可以在Debian和Ubuntu中使用

apt-get install keychain

这是 Debian钥匙串软件包页面 。如您所见,该项目不是很活跃,但是对我有用。我也在另一个答案中对此发表了一些评论 这里

29
Faheem Mitha

创建(或编辑,如果存在)以下〜/ .ssh/config文件:

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa
20
ness-EE

为方便起见,最佳方法是 jmtdFaheem 的答案的组合。

单独使用ssh-agent意味着需要为您打开的每个新终端创建ssh-agent的新实例。 keychain初始化时将要求输入私钥的密码并将其存储。这样,您的私钥就受到密码保护,但是您不必一遍又一遍地输入密码。

Arch Wiki 建议从/etc/profile.d/或您的Shell配置文件(例如.bash_profile.bashrc)初始化钥匙串。这样做的缺点是,一旦打开终端,它就会初始化您的钥匙串。

一种更灵活的方法是将keychain与特定的tmux会话组合。因此,在.bash_profile中:

tsess=$(tmux ls 2>&1)

if [[ "${tsess%%:*}" = "secured" ]] && 
   [[ -f $HOME/.keychain/$HOSTNAME-sh ]]; then
    # start keychain
    /usr/bin/keychain -Q -q --nogui ~/.ssh/id_rsa
    . $HOME/.keychain/$HOSTNAME-sh
fi

...然后只是在需要时(从键绑定启动)启动安全的tmux会话的情况:

#!/bin/bash
PID=$(pgrep tmux)
new="tmux -f $HOME/.tmux/conf new -s secured"
old="tmux attach -t secured -d"

if [[ -z "$SSH_AUTH_SOCK" ]]; then
    eval `ssh-agent`
    trap "kill $SSH_AGENT_PID" 0
fi

if [[ -z "$PID" ]]; then
    urxvtc -title "SSH" -e sh -c "${new}"
else
    urxvtc -title "SSH" -e sh -c "${old}"
fi

ssh-add

现在,当您启动特定的tmux会话时,钥匙串将仅初始化一次。只要该会话持续进行,您就可以访问那些ssh键并将其推送到您的远程存储库。

6
jasonwryan

您可以使用sshpass

$ Sudo apt-get install sshpass
$ sshpass -p 'password' ssh [email protected]

您只需要添加sshpass -p yourpassphrase,然后再添加常用的ssh命令。

0
belka