自动化 ssh-keygen-t rsa,这样它就不会询问密码短语

我需要在没有密码的情况下自动输入 ssh-keygen -t rsa,即在提示符处输入。
我如何通过一个 shell 脚本来做到这一点?

94571 次浏览

要在不提示输入密码短语的情况下生成 SSH 密钥对,您可以执行以下操作:

$ ssh-keygen -f id_rsa -t rsa -N ''

如果您需要在 Windows 中使用 PowerShell 完成此操作,请使用:

ssh-keygen -f $Name -t rsa -N '""'

注意,您还必须确保 git bin 目录在您的路径中:

$sshPath = "<path>\git\bin\"


$env:path += ";$sshPath"

然后在 PoshGit 中使用它就是:

Add-SshKey "<path>\.shh\KeyFilename"

只是修正一下答案2..。 我发现在我的 OL 和 RHEL 系统中,文件名应该是 id _ rsa 而不是 id.rsa。

因此,在 OL 或 RHEL 系统上,命令应该是:

$ ssh-keygen -f id_rsa -t rsa -N ''
$ ssh-keygen -f $HOME/.ssh/id_rsa -t rsa -N ''
$ printf '\n' | ssh-keygen -N ''

我需要在 bash 脚本中自动执行 ssh-keygen 命令,最后得到一个对我很有用的答案:

echo -e "\n" | ssh-keygen -N "" &> /dev/null

带有-e 的 echo 命令将“ n”解释为 Enter 键,但不与密码短语一起使用。然后使用选项 -N“”(空密码) ,密码将为空,不会询问任何内容。 /dev/null 将把‘ stdout’和‘ stderr’发送给/dev/null,这样就不会通过显示打印任何内容。

那么:

ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ''

正如 man ssh-keygen指出的:

SYNOPSIS
ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1] [-N new_passphrase] [-C comment] [-f output_keyfile]
(...)
-q      Silence ssh-keygen.

(即与 openssh-client软件包在 Debian 9.4伸展: OpenSSH_6.7p1 Debian-5+deb8u4)

请欣赏这个剧本..。 Powershell 脚本(例如 github)

将其粘贴到 myscript.ps1文件中..。

param(
[Parameter(Mandatory)]
[string]$keyName=$(throw "keyName - Param must be supplied"),
[Parameter(Mandatory)]
[string]$email=$(throw "email - Param must be supplied"),
$u="git",
$d="github.com",
$c="rsa"
)
$repo="repoName"
$account=":accountName"
$currentDir = Get-Location
Write-Host $HOME/.ssh/$keyName`_$c
mkdir $HOME/.ssh
Set-Location $HOME/.ssh
ssh-keygen -f ./$keyName`_$c -t $c -C $email -N '""'
Add-Content -Path ./config -Value "
Host $keyName
User $u
Hostname $d
PreferredAuthentications publickey
IdentitiesOnly yes
IdentityFile $HOME/.ssh/$keyName`_$c"
Write-Host "`n
Put this key into $d :"
cat $HOME/.ssh/$keyName`_$c.pub
Write-Host "`n
Use this to Clone the $repo repo :
git clone $u@$keyName$account/$repo.git"
cat config
Set-Location $currentDir

以上是未经测试,但它是接近我的工作

执行命令

> myscript.ps1 -keyName yourname -email yourname@yourdomain.com