我想制作一个自动脚本,该脚本调用ssh-keygen并创建一些稍后将使用的发布/私有密钥对。原则上一切正常....
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
...除了它要求我提供加密密钥的密码。这使得 - 目前 - 自动化变得困难。
我可以通过命令行参数提供密码-N thepassphrase,以防止出现提示。我什至不希望拥有密钥——另外通过加密保护——并且希望密钥对是明文。
这个问题的(最佳)解决方案是什么?
-q据称意味着“安静/静音”的选项仍然无法避免密码短语交互。我也没有找到这样的东西
ssh-keygen ... -q --no-passphrase
请不要开始说教或教导我“缺少密码”的利弊,我知道这一点。在交互式表单中(不是作为脚本),用户只需按两次 [ENTER],密钥将被保存为纯文本。这就是我想在这样的脚本中实现的目标:
#!/bin/bash 命令 1 命令 2 var=$(command3) # 这不应该停止脚本并要求输入密码 ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q
hum*_*ace 187
这将防止出现密码提示并将密钥对设置为以明文形式存储(这当然带有所有缺点和风险):
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
Run Code Online (Sandbox Code Playgroud)
电源外壳:
ssh-keygen -b 2048 -t rsa -f C:/temp/sshkey -q -N """"
Run Code Online (Sandbox Code Playgroud)
指令:
ssh-keygen -b 2048 -t rsa -f C:/temp/sshkey -q -N ""
Run Code Online (Sandbox Code Playgroud)
小智 48
我发现做你想做的最简单的方法是这个(使用默认文件名的例子)
cat /dev/zero | ssh-keygen -q -N ""
Run Code Online (Sandbox Code Playgroud)
如果~/.ssh/id_rsa文件已经存在,该命令将退出而不修改任何内容。
如果没有,您将在该文件名中获得一个全新的密钥。
无论哪种方式,您都没有覆盖任何内容,并且您最终知道您有一个密钥。
小智 18
这对我有用:
ssh-keygen -t rsa -f /home/oracle/.ssh/id_rsa -q -P ""
Run Code Online (Sandbox Code Playgroud)
该-P是密码选项,""是空密码。
您可以使用 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\"
")
Run Code Online (Sandbox Code Playgroud)
但请注意,如果文件 /tmp/sshkey 已经存在,它将失败,因为命令的输出会有所不同。