【问题标题】:How do I remove the passphrase for the SSH key without having to create a new key?如何在无需创建新密钥的情况下删除 SSH 密钥的密码?
【发布时间】:2010-09-11 20:40:27
【问题描述】:

我在笔记本电脑上创建新的 SSH 密钥时设置了密码。但是,正如我现在意识到的那样,当您尝试在一小时内通过 SSH 多次提交(GitSVN)到远程位置时,这是非常痛苦的。

我能想到的一种方法是,删除我的 SSH 密钥并创建新密钥。有没有办法删除密码,同时仍然保留相同的密钥?

【问题讨论】:

  • 我认为严格的答案实际上是 Torsten Marek 的回应。 ssh-agent 技巧可能正是您想要的,但它是对不同问题的答案。
  • 密码短语不仅仅是解锁私人SSH密钥的密钥,而是加密机制的一部分。一部分是您的 SSH 密钥,另一部分是手动输入的密码。只有当两个部分都正确时,从它们动态生成的复合密钥才有效。因此,其他密码对应于其他 SSH 密钥(没有密码是“其他密码”的特例)。
  • 结束这样的问题就像争论编程语言中的副作用是否应该被允许,因为它们是“纯”的。纯粹主义者总是肆无忌惮,而其他人则不在乎,因为它是一个有用的功能,让生活更轻松。 ssh 是必需的,即使很难,它也不是严格与编程相关的......不要关闭这样的问题。 :|
  • 我同意,这很痛苦,而且我每天也会经历多次。但有时,它给了我最后一次机会,让我在实际推动之前先看看我在推动什么。我确实发现这个小命令行模块很有帮助:coderwall.com/p/fasnya/add-git-branch-name-to-bash-prompt

标签: unix ssh passwords openssh passphrase


【解决方案1】:

简答:

$ ssh-keygen -p

这将提示您输入密钥文件位置、旧密码和新密码(可以留空以没有密码)。


如果您想在没有提示的情况下在一行中完成所有操作:

$ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

重要提示:请注意,在执行命令时,它们通常会以纯文本形式记录在您的 ~/.bash_history 文件(或类似文件)中,包括提供的所有参数(即本例中的密码)。因此,除非您有特殊原因,否则建议您使用第一个选项。

请注意,尽管您仍然可以使用-f keyfile,而无需指定-P-N,并且密钥文件默认为~/.ssh/id_rsa,因此在许多情况下甚至不需要它。

您可能需要考虑使用 ssh-agent,它可以暂时缓存密码。最新版本的 gpg-agent 也支持 ssh-agent 使用的协议。

【讨论】:

  • 明确地说:您可以在终端中运行ssh-keygen -p。然后它会提示您输入密钥文件(默认为我的正确文件,~/.ssh/id_rsa)、旧密码(输入您现在拥有的密码)和新密码(不输入任何内容)。
  • 前。 :ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa
  • -1 用于让用户在终端中输入他的密码并使其可以通过~/.bash_history 访问。最好输入:$ cd ~/.ssh && ssh-keygen -f id_dsa -p
  • 你们应该注意,如果您向 shell 输入命令,则会在 ~/.bash_hstory 即启动一个(空白)空间,命令不会记录。使用` ssh-keygen -p -P oldpassphrase -N "" -f ~/.ssh/id_rsa`,你就可以了(除非你有其他键盘记录器)。你也可以get rid of the record from the history..
  • 可能值得添加一行说明这将覆盖现有文件并且不会提示输入新位置。
【解决方案2】:

$ ssh-keygen -p为我工作

打开了 git bash。已粘贴:$ ssh-keygen -p

按回车键获取默认位置。

输入旧密码

输入新密码 - 空白

确认新密码 - 空白

BOOM 为 git push 输入密码的痛苦消失了。

谢谢!

【讨论】:

  • 如果您按回车键输入$ ssh-keygen -p 并且您的密钥不在默认位置(/Users/yourname/.ssh/id_rsa),您可以在出现提示时输入/Users/yourname/.ssh/yourkey 来响应
  • 不是一个非常安全的做法。 root 可以在没有密码的情况下使用您的密钥,
  • BOOM 你的密钥现在不安全
  • “root 可以在没有密码的情况下使用您的密钥”将其添加到 root 可以执行的所有“安全违规”列表中......更深的麻烦。
【解决方案3】:

您可能希望将以下内容添加到您的 .bash_profile(或等效文件)中,这会在登录时启动 ssh-agent。

if [ -f ~/.agent.env ] ; then
    . ~/.agent.env > /dev/null
    if ! kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
        echo "Stale agent file found. Spawning new agent… "
        eval `ssh-agent | tee ~/.agent.env`
        ssh-add
    fi 
else
    echo "Starting ssh-agent"
    eval `ssh-agent | tee ~/.agent.env`
    ssh-add
fi

在某些 Linux 发行版(Ubuntu、Debian)上,您可以使用:

ssh-copy-id -i ~/.ssh/id_dsa.pub username@host

这会将生成的 id 复制到远程机器并将其添加到远程钥匙串中。

你可以阅读更多herehere

【讨论】:

  • 现代发行版不是开箱即用的 ssh 代理吗?
  • 在某些 Linux 发行版(Ubuntu、Debian)上,您可以使用:ssh-copy-id -i ~/.ssh/id_dsa.pub username@host 当然假设您可以通过这种方式访问​​。虽然它是从 2008 年开始的,但它可能应该被编辑以引用 id_rsa.pub(是的,我可以编辑它,但我觉得这样做对别人的作品感到不舒服——尤其是这样的东西)。
  • @TroelsArvin 是的。但是有时它会被杀死(尽管我没有想到我遇到的情况 - 除非 X11 有问题并且您必须重新启动它......这可能就是这样一个例子)。在这种情况下,您必须“重新创建”它。
【解决方案4】:

要更改或删除密码,我经常发现最简单的方法是只传入 pf 标志,然后让系统提示我提供密码:

ssh-keygen -p -f <name-of-private-key>

例如:

ssh-keygen -p -f id_rsa

如果要删除密码,请输入空密码。

删除或更改密码的示例运行如下所示:

ssh-keygen -p -f id_rsa
Enter old passphrase: 
Key has comment 'bcuser@pl1909'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

将密码短语添加到没有密码短语的密钥时,运行看起来像这样:

ssh-keygen -p -f id_rsa
Key has comment 'charlie@elf-path'
Enter new passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved with the new passphrase.

【讨论】:

    【解决方案5】:

    Mac 上,您可以将私有 ssh 密钥的密码存储在您的钥匙串中,这样可以透明地使用它。如果您已登录,则它可用,当您注销时,您的 root 用户将无法使用它。删除密码是个坏主意,因为任何拥有该文件的人都可以使用它。

    ssh-keygen -K
    

    将此添加到~/.ssh/config

    UseKeychain yes
    

    【讨论】:

      【解决方案6】:

      在 Windows 上,您可以使用 PuttyGen 加载私钥文件,删除密码,然后覆盖现有的私钥文件。

      【讨论】:

        【解决方案7】:

        对我来说,在 Windows 中它一直在说 输入上述命令后,“id_ed25135:没有这样的文件或目录”。所以我去文件夹,复制文件夹资源管理器中的路径并在末尾添加“\id_ed25135”。

        这是我最终输入并工作的内容:
        ssh-keygen -p -f C:\Users\john\.ssh\id_ed25135

        这行得通。因为出于某种原因,在 Cmder 中,默认路径类似于 C:\Users\capit/.ssh/id_ed25135(有些是反斜杠:“\”,有些是正斜杠:“/”)

        【讨论】:

          猜你喜欢
          • 2014-10-17
          • 2017-06-14
          • 2014-01-06
          • 2012-06-09
          • 1970-01-01
          • 1970-01-01
          • 2016-04-16
          • 2022-11-06
          • 2018-08-19
          相关资源
          最近更新 更多