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

如何避免每次推送到 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
...

答案1

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

$ ssh-add

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

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

Could not open a connection to your authentication agent.

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

eval $(ssh-agent)

然后重复该ssh-add命令。

值得一看ssh 代理联机帮助页

答案2

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

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

此后,将保存当前会话的密码。并且不会再被询问。

答案3

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

Host *
    UseKeychain yes
    AddKeysToAgent yes
    IdentityFile ~/.ssh/id_rsa

答案4

为了方便起见,最佳方法是以下答案的组合杰姆特法希姆

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

拱门维基建议从/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密钥并将其推送到远程存储库。

相关内容