我需要在没有密码的情况下自动输入 ssh-keygen -t rsa,即在提示符处输入。 我如何通过一个 shell 脚本来做到这一点?
ssh-keygen -t rsa
要在不提示输入密码短语的情况下生成 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 $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指出的:
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)
openssh-client
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