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

$ cat .hg/hgrc 
[paths]
default = ssh://hg@bitbucket.org/tshepang/bloog

$ hg push
Enter passphrase for key '/home/wena/.ssh/id_rsa': 
pushing to ssh://hg@bitbucket.org/tshepang/bloog
searching for changes
...


评论

是否不创建仅提供给一个主机的无密码短语的密钥是一种选择?它在github
上对我有用

#1 楼

您需要使用ssh代理。简短的答案:在推入之前尝试

$ ssh-add


。在询问时提供密码。

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

Could not open a connection to your authentication agent.


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

eval $(ssh-agent)


,然后重复执行ssh-add命令。

值得一看ssh代理手册。

评论


您可以只输入ssh-agent来评估什么?

–詹姆斯·麦克马洪
17年9月18日在17:07

它显示一些命令,这些命令使您可以使用它,而不会为您执行它们。 eval进行了谴责。

– tshepang
18-2-3在9:21



与原始问题无关,但是如果您在GitHub,Bitbucket等上仍然遇到这些问题,请确保您使用的是git / ssh URL,而不是http,它将继续询问用户名和密码。

–捷克文
18年6月11日在7:18

并且,如果您没有默认密钥,或者想添加多个密钥,请ssh-add / path / to / key

– Alex Shroyer
19 Sep 8'在18:19

#2 楼

解决此问题的方法是使用ssh-agentssh-add

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


之后,将密码短语保存为当前会话。不会再被问到了。

评论


大多数人根本不想为自己的密码短语感到烦恼。

– connexo
18年6月16日在16:55

@stefano,我在Centos上,问题是每次我重新连接到ssh时都重复这些步骤!

– SlimenTN
20年6月15日在14:41

#3 楼

我使用钥匙串来管理ssh密钥。它也可以在Debian中使用,因此也可以在Ubuntu中使用

apt-get install keychain


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

评论


//,这对我有用。它比ssh-agent更好,因为每次打开终端时都不需要输入ssh密钥密码。

– Nathan Basanese
2015年9月10日19:12

@NathanBasane您是说使用钥匙串不需要在每次打开终端时都输入ssh密钥密码吗?您如何配置?因为每次打开终端时,钥匙串都会不断询问密码,尽管这只是我在引导后第一次打开密码,但仍然如此。我不想每次都输入密码。

– m4l490n
18年1月1日在19:20

@ m4l490n否,如果您使用的是钥匙串,则无需在每次打开终端时都输入ssh密钥密码。但是启动后确实需要输入一次。密码短语不会保存到磁盘-这样会很不安全。

– Faheem Mitha
18年1月1日在20:27

对我来说,每次我登录时都会询问(我在远程服务器上有一个git存储库+ ssh键,每次我执行“ git pull”时都需要输入密码)

–马丁·托马
19年5月5日在18:30

@MartinThoma看来错了。检查是否已正确配置.ssh。特别是您的外壳是否配置正确?如果仍然无法使用,并且您无法解决问题,可以提出问题。

– Faheem Mitha
19年6月5日在22:30



#4 楼

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

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


评论


但是我为每项服务使用不同的密钥对...

– connexo
18年6月16日在16:53

@connexo,您可以将通配符星号替换为您的主机名,并将“ id_rsa”替换为相应的私钥

–ness-EE
18年6月25日在13:26

我需要在UseKeychain是的上方添加IgnoreUnknown AddKeysToAgent,UseKeychain。

–consideRatio
18年7月22日在23:36



我收到此错误:“ UseKeychain yes”行上的“ Bad configuration option:usekeychain”。

– m4l490n
18-10-31在15:09

它在consideRatio注释中的选项之外起作用。 @ m4l490n您也可以尝试使用该选项,但如果没有该选项,我也会遇到相同的错误消息。

–рüффп
20 Mar 24 '20在10:23

#5 楼

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

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

更灵活的方法是将/etc/profile.d/与特定的.bash_profile会话结合在一起。因此,在.bashrc中:

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


...然后这只是在需要时启动安全的keychain会话(从键绑定启动)的一种情况:<现在,当您启动特定的tmux会话时,您的钥匙串将仅初始化一次。只要该会话持续进行,您就可以访问这些.bash_profile密钥并推送到您的远程存储库。

评论


我将如何在远程计算机上使用它?我修改了第二个脚本以检查$ SSH_CLIENT,如果存在,则不执行urxvtc,仅执行tmux。可以,但是问题是.bash_profile部分。当我第一次登录该框时,它显示“找不到服务器:连接被拒绝”,这是“ tmux ls”的输出。然后,当我执行第二个脚本时,tmux要么启动一个新会话,要么附加到现有会话,但是没有钥匙串提示。然后,当我退出会话时,钥匙串提示在那里等待。

– J.C. Yamokoski
2012年2月20日15:13

如果没有会话,我已经更新了使tmux输出静音的答案。

– Jasonwryan
2012年2月20日在18:08

谢谢,但这仍然不能解决钥匙串问题。 tmux创建新会话,但直接进入任何空提示。仅当我退出tmux会话时,我才能看到钥匙串提示询问我的密码短语。

– J.C. Yamokoski
2012年2月20日在20:08

我想我应该停止说钥匙串了,因为钥匙串只在.bash_profile中执行。问题出在执行ssh-add。虽然,如果我在创建tmux会话后手动运行ssh-add,它会起作用。

– J.C. Yamokoski
2012年2月20日在20:17

跳过第二个脚本,仅从.profile启动安全的tmux会话-这样,登录后将立即提示您输入密钥。

– Jasonwryan
2012年2月20日在20:29

#6 楼

您可以使用sshpass

$ sudo apt-get install sshpass
$ sshpass -p 'password' ssh username@server


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

评论


这听起来真是个愚蠢的主意。这样会不会在您的Shell历史记录中以明文形式显示您的密码?

– connexo
18年6月16日在16:54

确实如此,但是您不应该使用密码来保护会话吗?

– Belka
18年6月18日在8:01

即使您这样做,您还有多少次同事坐在您旁边并帮助您/向您学习?

– connexo
18年6月18日在14:31

我对此表示赞同。我正在测试大量使用SSH的安装脚本套件。我不断创建和销毁SSH密钥/对。我需要零交互。我根本不在乎有人看到他们的密码,因为它们没有用。我讨厌看到那些头脑狭窄的人胆怯地投下反对票,而不赞成“不以我认为的方式使用计算机”的人。

–马丁·布拉姆威尔
20年8月22日在19:17



@MartinBramwell终于有人像我一样。计算机只是工具,我们必须根据我们的需要弄清楚如何使用它们!

– Belka
20年8月24日在8:21