How do I remove the passphrase for the SSH key without having to create a new key?
我在笔记本电脑上创建新的ssh密钥时设置了一个密码。但是,正如我现在意识到的,当您试图在一个小时内通过ssh多次提交(git和svn)到远程位置时,这是非常痛苦的。
我能想到的一种方法是,删除我的ssh密钥并创建新的。有没有办法在保持相同密钥的同时删除密码短语?
- 我认为严格的答案实际上是托尔斯滕·马雷克的回答。ssh代理技巧可能是您正在寻找的,但它是另一个问题的答案。
- 虽然这是一个很好的问题,但它可能更适合superuser.com。
- 密码短语不仅是解锁专用ssh密钥的密钥,而且是加密机制的一部分。一部分是ssh密钥,另一部分是手工输入的密码。只有当两部分都正确时,从它们动态生成的组合键才有效。因此,其他口令对应于其他ssh密钥(没有口令是"其他口令"的特殊情况)。
- 结束这样的问题就像讨论编程语言中的副作用是否应该被允许,因为它们是"纯的"还是"不纯的"。纯粹主义者总是乱作一团,而其他人却一点也不在乎,因为这是一个有用的特性,使生活更容易。ssh是必需的,甚至很难,它与编程无关…不要结束这些问题。:
- 我同意这是一个很好的问题,如果mods想通过重定向把它转移到超级用户身上,那太好了,但它不应该仅仅在社区发言如此强烈时关闭。
- 哇577其他人和我一样疯狂
简短回答:
然后,这将提示您输入关键文件位置、旧密码和新密码(可以保留为空以不使用密码)。
如果您想在一行中完成所有操作而不需要提示,请执行以下操作:
1
| $ ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] |
重要提示:请注意,在执行命令时,它们通常以纯文本(包括所提供的所有参数,即本例中的密码)记录在您的~/.bash_history文件(或类似文件)中。因此,建议您使用第一个选项,除非您有特定的理由这样做。请注意,尽管您仍然可以使用-f keyfile,而不必指定-P或-N,并且keyfile默认为~/.ssh/id_rsa,因此在许多情况下甚至不需要它。
您可能需要考虑使用ssh代理,它可以缓存密码短语一段时间。GPG代理的最新版本还支持ssh代理使用的协议。
- 明确地说:您可以在终端中运行ssh-keygen -p。然后,它将提示您输入一个关键文件(默认为我的正确文件,~/.ssh/id_rsa)、旧密码(输入您现在拥有的内容)和新密码(不输入任何内容)。
- 例:ssh-keygen -p -P oldpassphrase -N"" -f ~/.ssh/id_rsa。
- 啊,用油灰。它是跨平台的,你可以通过一个图形用户界面完成工作。加载密钥并删除密码,然后保存privatekey:)
- -1用于让用户在终端中输入密码,并使其可以通过~/.bash_history访问。最好打字:$ cd ~/.ssh && ssh-keygen -f id_dsa -p。
- 您应该注意,如果您输入命令到shell启动了一个(空白)空间,该命令不会记录到~/.bash_hstory中,即使用'ssh keygen-p-p oldpassphrase-n'-f~/.ssh/id_rsa',您就可以了(除非您在那里有其他的键记录器)。你也可以把历史上的记录去掉。
- 如果您想将整个bash会话从记录中删除,您只需kill -9 $$,因为$$是当前的pid。
- @巨大,这不是普遍的事实。我不否认你的系统会这样做。但是,如果是这样的话,那是因为特殊的配置。
- @brunobronosky right、histcontrol环境变量驱动器、记录的命令格式和不记录的命令格式。通常在.bashrc中设置为HISTCONTROL=ignorespace作为默认值。
- 可能值得添加一行,说明这将覆盖现有文件,而不提示输入新位置。
- @如果你要去那里,那么你也应该指出,在例如x11中,你可以嗅探所有的键盘笔触(尽管我不记得你到底能做些什么)。无论OP是否使用x11,都与我的观点无关。
- @布鲁诺布隆诺斯基,为什么还要麻烦呢?只需执行history -c就可以清除它。如果您不关心历史,也可以将其符号链接到/dev/null。还可以删除历史文件中的特定条目。您也可以直接编辑文件。或者你说的只是那个会议?重读一遍,也许你是那个意思?
- Ubuntu 16和18最简单的解决方案。谢谢你
您可能需要将以下内容添加到.bash_概要文件(或等效文件)中,该文件在登录时启动ssh代理。
1 2 3 4 5 6 7 8 9 10 11 12
| 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)上,您可以使用:
1
| ssh-copy-id -i ~/.ssh/id_dsa.pub username@host |
这将把生成的ID复制到远程机器上,并将其添加到远程钥匙链中。
你可以在这里读到更多。
- 现代发行版不是开箱即用地启动ssh代理吗?
- 在一些Linux发行版(ubuntu,debian)上,您可以使用:ssh copy id-i~/.ssh/id_dsa.pub username@host,当然您可以通过这种方式访问。虽然它是从2008年开始的,但它可能应该被编辑为引用id_rsa.pub(是的,我可以编辑它,但我不觉得这样做对其他人的作品是舒适的-它特别适用于类似的事情)。
- @是的。但是Otoh有时会被杀死(尽管我遇到的情况并没有想到——除非x11有问题,你必须重新启动它……这可能就是这样一个例子)。在这种情况下,你必须"重新创建"它。
$ ssh-keygen -p为我工作
打开Git Bash。粘贴:$ ssh-keygen -p。
按Enter键进入默认位置。
输入旧密码
输入新密码-空白
确认新密码-空白
砰,输入git push密码的痛苦消失了。
谢谢!