PowerShell ssh 不会停止询问我安装的密钥的密码

PowerShell ssh 不会停止询问我安装的密钥的密码

从 PowerShell 会话(Windows 10)登录时仍要求我输入密钥密码。

事实证明这些是错误的参数:

ssh -o StrictHostKeyChecking=no

或者

ssh -o "StrictHostKeyChecking=no"

我发誓我有一个完美的忽略参数,它可以正常工作,但我却丢失了它。

我想让 ssh 忽略我已安装的密钥。

我在 ssh 密钥环中安装了一个密钥,用于访问一个关键设备。该密钥受密码保护(这会导致登录到其他不使用该密钥的系统时出现问题)。

答案1

StrictHostKeyChecking与您的私钥密码无关。它会检查服务器的加密指纹是否与本地存储的指纹相同。还记得吗,第一次连接时,它会询问您指纹是否正确?现在,指纹存储在 ~/.ssh/known_hosts 中,它会与此进行比较。这是为了避免 MITM 攻击,而无需像 SSL/TLS 那样拥有完整的信任链。

现在,为了避免输入密钥密码,基本上有两个选择:

  • 删除密钥上的密码(ssh-keygen -p不要输入密码),这不是很安全,所以更好的选择是:
  • 用于ssh-agent管理密钥

就我个人而言,我从未在 Powershell 中使用过 ssh-agent,但是 Microsoft说了以下内容关于它:

# By default the ssh-agent service is disabled. Allow it to be manually started for the next step to work.
# Make sure you're running as an Administrator.
Get-Service ssh-agent | Set-Service -StartupType Manual

# Start the service
Start-Service ssh-agent

# This should return a status of Running
Get-Service ssh-agent

# Now load your key files into ssh-agent
ssh-add ~\.ssh\id_ed25519

答案2

(注:我同意 mtak 的观点,这StrictHostKeyChecking与选择和使用客户鍵)

OpenSSH(Windows 10 以上版本提供的一个端口)没有“密钥环”,但它有一个目录,其中可能存放默认文件默认情况下也会尝试一个进程(ssh-agent)。

如果你的意思是不想使用你的代理进程,请指定-o IdentitiesOnly=yes。但是,一旦在代理中加载了密钥,就不会再提示您输入密码,这与您对问题的描述不符。当主机对身份验证尝试施加限制时,更需要此选项,并且代理加载了太多密钥,以至于在达到该主机的正确密钥之前,尝试所有密钥都会耗尽主机的限制。

如果您的意思是您有默认文件(%userprofile%/.ssh/id_{rsa,dsa,ecdsa,ed25519}或者可能是它们的_sk-cert体;我不知道 Windows 端口是否支持)并且您不想对于特定连接使用它或它们(全部),请(仅)使用或sk指定您想要的文件。-i-o IdentityFile=

你可以将其中一个或两个自动应用于特定主机名,只需将其放在文件中的HostMatch块中即可%userprofile%/.ssh/config。请参阅手册页。不过,听起来你真正想要的是将“关键设备”的特殊(和受密码保护的)密钥移至非违约名称,因此它不用于“正常”连接,但配置为仅用于特定设备的主机名。

答案3

正如这里解释的那样,为了忽略您添加的 ssh 密钥,请使用此参数来忽略登录的密钥:

ssh -o PreferredAuthentications=password host.example.org

相关内容