如何使用ssh-keygen和PowerShell覆盖现有的SSH密钥文件而无需输入y

4

如果我想在不输入y的情况下覆盖现有的SSH密钥文件,那么我可以在bash中执行以下操作:

echo "y" | ssh-keygen -f /home/wakatana/id_rsa -N ""

如何使用PowerShell实现相同的功能?我尝试了以下操作:
Write-Host "y" | ssh-keygen.exe -f C:\Users\wakatana\Desktop\id_rsa -N """"

它不会显示 Overwrite (y/n)? 对话框,但是它并没有重写现有的密钥。问题出在哪里?

3个回答

4

在调用ssh-keygen之前,如果文件已经存在,只需删除该文件。

盲目地向应用程序发送“yes”,而不知道它首先要求什么,是非常危险的。


1

为什么不先删除现有的键呢?

Powershell(我不是ps大师,所以根据需要进行调整):

Remove-Item -Path C:\Users\wakatana\Desktop\id_rsa && Remove-Item -Path C:\Users\wakatana\Desktop\id_rsa.pub && ssh-keygen.exe -f C:\Users\wakatana\Desktop\id_rsa -N """"

关于编程(既然我在这里,这就是我来的目的):

Linux

rm -f path/to/.ssh/id_rsa* && ssh-keygen -b 4096 -t rsa -f path/to/.ssh/id_rsa

如果这些内容对下一个人有所帮助,那就太好了。继续前进,同行们 =]

编辑:我看得很仔细。刚刚看到了Martin Prikryl的回答。没什么区别 - 哈哈!


0
尝试使用Write-Output而不是Write-Host
Write-Output "y" | ssh-keygen.exe -f .\test -N "blahblah"

enter image description here


1
这里的Write-Output是多余的。 - Bill_Stewart
@Bill_Stewart 的观点很好。这个也应该可以工作:"y" | ssh-keygen.exe -f .\test -N "blahblah" - Glenn
非常感谢。这个方法行得通了。您能否解释一下为什么 Write-Host 不起作用,而 Write-Output 能起作用吗? - Wakan Tanka
@WakanTanka 这里有一个很好的解释。用我的话来说,Write-Host 将输出发送到“主机”,这可以是不同的东西,但通常是命令控制台。Write-Output 通过管道将输出发送到 STDOUT,然后被解释为管道中下一个本地命令的 STDIN。 - Glenn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接