ssh-keygen
并创建一些发布/私有密钥对,稍后将使用。原则上,一切正常。... ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
...除了要求我提供用于加密密钥的密码短语。这使目前的自动化变得很困难。
我可以通过命令行参数
-N thepassphrase
提供密码,以防止出现提示。我什至不希望另外有按键
此问题的(最佳)解决方案是什么(最好)?
-q
选项(据说意味着“安静/安静”)仍不能避免密码短语的交互。另外,我还没有找到类似这样的内容。请不要开始讲教或向我介绍“密码丢失”的优点和缺点,
我知道。交互形式(不是脚本形式),用户只需按两次[ENTER]键,该键将另存为纯文本。这就是我想要在这样的脚本中实现的:
#!/bin/bash command1 command2 var=$(command3) # this should not stop the script and ask for password ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
#1 楼
这将防止密码短语提示出现,并将密钥对设置为以明文形式存储(这当然会带来所有缺点和风险):ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
使用内置于SSH的Windows 10 /> Powershell:
ssh-keygen -b 2048 -t rsa -f C:/temp/sshkey -q -N """"
ssh-keygen -b 2048 -t rsa -f C:/temp/sshkey -q -N ""
#2 楼
我发现最简单的方法是执行此操作(使用默认文件名的示例) cat /dev/zero | ssh-keygen -q -N ""
如果
~/.ssh/id_rsa
文件已经存在,则该命令将退出而无需进行任何修改。 如果没有,您将以该文件名获得一个全新的密钥。
无论哪种方式,您都不会覆盖任何内容,并且您知道最终您有了密钥。
评论
确认:在lubuntu 14.04.2上
–user77115
15年3月15日在11:40
如果您真的希望它安静,则将输出通过管道传递到/ dev / null:cat / dev / zero | ssh-keygen -q -N“”> / dev / null
–克里斯·格雷格(Chris Gregg)
16-2-5在14:53
在(肯定是过时的)SLES 11上,上述命令无法生成密钥。是的“” | ssh-keygen -N“”>&-2>&-可以正常工作,并且不输出任何内容(无论是否已经存在密钥文件),并且不会覆盖以前存在的密钥文件。
–zrajm
16年5月16日在14:41
为什么您选择/ dev / zero?
–maxschlepzig
18年2月4日在18:59
@maxschlepzig这就是它对“您要覆盖的内容”回答“否”的方式。文件已存在时提示
–乔·霍洛威(Joe Holloway)
20年6月12日在20:31
#3 楼
这对我有用:ssh-keygen -t rsa -f /home/oracle/.ssh/id_rsa -q -P ""
-P
是密码短语选项,而""
是空密码短语。评论
key_save_private:没有这样的文件或目录
– Dimitri Kopriwa
16年7月21日在10:48
-P
– Gianfranco P.
17年2月21日在23:04
可以,但是如果密钥已经存在,则要求覆盖
–elbarna
20年4月7日,0:23
#4 楼
您可以使用Expect为您发送“输入”cat test.sh
#!/bin/bash
set -x
XYZ=$(expect -c "
spawn ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
expect \"Enter passphrase (empty for no passphrase):\"
send \"\r\"
expect \"Enter same passphrase again:\"
send \"\r\"
")
但是请注意,如果文件/ tmp / sshkey已经存在,它将失败,因为命令会有所不同。
评论
感谢您的贡献。对于相同类型的问题,期望似乎更加通用。...以及脚本和用户交互会冲突的那些问题。我将意识到/ tmp / sshkey已经存在的潜在冲突,并在使用您的命令之前进行检查。
–人类与和平
2013年3月27日14:26
#5 楼
我在ssh-keygen之前做了一个简单的回显。因此,su - <user> -c "echo |ssh-keygen -t rsa"
已在Redhat 6上进行了测试
评论
我不认为这是最好的答案,但是我认为,也没有任何理由要拒绝投票。
–cubuspl42
16年11月1日在15:05
#6 楼
可以放入.bashrc或.bash_aliases中的ssh密钥生成函数。 # Make an ssh key if not exists, and copy ssh key to clipboard
# needs xclip to copy to system clipboard
ssh-key-now () {
cat /dev/zero | ssh-keygen -t ed25519 -C "made with ssh-key-now" -q -N ""
xclip -sel clip < ~/.ssh/id_ed25519.pub
echo "ssh-key copied to clipboard"
}
节省了重新安装操作系统并丢失时的时间您的ssh密钥,并且必须再次设置gitlab / github
#7 楼
对于另一个用户,已在Ubuntu 18.04上进行了测试:sudo -u username bash -c "ssh-keygen -f ~username/.ssh/id_rsa -N ''"
评论
对另一个用户进行此操作有什么意义? ssh-keygen如何取决于运行它的用户?我只是想更好地理解这一点。谢谢。
– pgr
20年11月2日,16:17
好点子。好处之一是ssh-keygen设置了正确的权限。我已经更新了答案,可以将文件直接放在正确的位置。现在,该命令可以一次性完成所有操作:无需移动文件或更改权限。
– Jeroen Vermeulen-MageHost
20年11月2日,23:31
评论
这有效。如果/ tmp / sshkey已经存在,则会出现一个覆盖提示。这可以通过重定向/关闭标准输入来防止-例如通过添加0>&-。
–maxschlepzig
18年2月4日在19:05
在/ tmp中生成一对清晰的密钥的坏习惯;)
–tisc0
20-2-24在16:03