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

我可以想到的一种方法是删除我的SSH密钥并创建新的。是否有方法删除密码,同时保持相同的密钥?


当前回答

简短回答:

$ ssh-keygen -p

然后,这将提示您输入密钥文件位置、旧密码短语和新密码短语(可以留空以无密码短语)。


如果您想在一行中完成所有操作而不需要提示,请执行以下操作:

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

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

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

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

其他回答

在Mac上,您可以将私有ssh密钥的密码短语存储在密钥链中,这使其使用变得透明。如果您已登录,它是可用的,当您注销时,根用户无法使用它。删除密码短语是一个坏主意,因为任何拥有该文件的人都可以使用它。

ssh-keygen -K

将其添加到~/.ssh/config

UseKeychain yes

简短回答:

$ ssh-keygen -p

然后,这将提示您输入密钥文件位置、旧密码短语和新密码短语(可以留空以无密码短语)。


如果您想在一行中完成所有操作而不需要提示,请执行以下操作:

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

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

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

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

要更改或删除密码短语,我通常发现只传递p和f标志是最简单的,然后让系统提示我提供密码短语:

ssh keygen-p-f<私钥名称>

例如:

ssh密钥根-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.

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

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复制到远程计算机,并将其添加到远程密钥链。

你可以在这里和这里阅读更多。

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