从 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=
你可以将其中一个或两个自动应用于特定主机名,只需将其放在文件中的Host
或Match
块中即可%userprofile%/.ssh/config
。请参阅手册页。不过,听起来你真正想要的是将“关键设备”的特殊(和受密码保护的)密钥移至非违约名称,因此它不用于“正常”连接,但配置为仅用于特定设备的主机名。
答案3
正如这里解释的那样,为了忽略您添加的 ssh 密钥,请使用此参数来忽略登录的密钥:
ssh -o PreferredAuthentications=password host.example.org