PCEVA,PC绝对领域,探寻真正的电脑知识
开启左侧

plink.exe连接远程OpenSSH Server时缓存的公钥私钥存在哪个位置?

[复制链接]
红色狂想 发表于 2024-6-27 17:29 | 显示全部楼层 |阅读模式
点击数:2594|回复数:8
Windows环境下,在用plink.exe手动连接远程OpenSSH Server时,会自动生成一对公钥和私钥证书,以便进行身份验证,现在我想清除它,请问这组公钥和私钥信息被缓存在哪个位置?
eikeime 发表于 2024-6-27 23:30 | 显示全部楼层
注册表里面吧
红色狂想  楼主| 发表于 2024-6-29 15:39 | 显示全部楼层

用plink作为关键字搜索了注册表,没有任何键值项信息,这个plink.exe是我单独下载放到自己的项目目录下使用的,属于绿色,应该不会往注册表中写入信息。
plink.exe -ssh -pw 1234567890 username@hostname
plink.exe -ssh -l username -pw 1234567890 hostname

我描述的情况是,当使用以上两种登录远程OpenSSH Server命令行中的任何一种方式建立连接时,如果是与一台陌生的主机首次连接,plink.exe将会返回以下提示信息:

此服务器未缓存主机密钥:
192.168.0.139(端口 22)
您无法保证该服务器就是您认为的那台计算机。
服务器的 ssh-ed25519 密钥指纹为:
ssh-ed25519 255 SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
如果您信任此主机,请输入“y”以将密钥添加到 Plink 的
缓存中并继续连接。
如果您只想继续连接一次,而不将
密钥添加到缓存中,请输入“n”。
如果您不信任此主机,请按 Return 放弃
连接。
将密钥存储在缓存中?(y/n,Return 取消连接,i 以获取更多信息)



要求用户交互确认,要么输入y缓存密钥,要么输入n仅连接这一次,否则就无法建立连接。而我的目的是想利用plink.exe实现自动化批处理脚本,连接登录OpenSSH远程主机发送命令行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
eikeime 发表于 2024-7-1 21:35 | 显示全部楼层
本帖最后由 eikeime 于 2024-7-1 21:39 编辑
  1. HKEY_CURRENT_USER\SoftWare\SimonTatham\PuTTY\SshHostKeys
复制代码


另外 为啥不直接

  1. ssh user@hostname xxxxxxxxxxxx
复制代码

比如 关 windows 的
  1. ssh Admin@winserver.local shutdown -s -t 0
复制代码


红色狂想  楼主| 发表于 2024-7-2 14:18 | 显示全部楼层
eikeime 发表于 2024-7-1 21:35
另外 为啥不直接

什么叫直连,像ssh -o StrictHostKeyChecking=no这样,SSH客户端不接受远程主机公钥验证吗?这样不安全啊,虽然是家庭应用场景,但还是要讲究一下规范吧,而且我没安装PuTTY这套软件,就是单独下载了他的plink.exe命令行组件放在自己开发的PowerShell自动化脚本目录下调用
eikeime 发表于 2024-7-3 22:09 | 显示全部楼层
“直接” 不是 “直连”
plink 单独下载 也是这个 注册表位置

ssh sever 那边 添加 authorized keys ,本地就可以 只凭证书 连接 不需要密码了
红色狂想  楼主| 发表于 2024-7-4 21:16 | 显示全部楼层
eikeime 发表于 2024-7-3 22:09
“直接” 不是 “直连”
plink 单独下载 也是这个 注册表位置

看花眼了,参照你给的这个HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys键值项路径,还真在注册表中搜到了plink.exe缓存的公钥信息,详见下图:



你说的用证书连接验证的方式确实不错,解决了在自动化脚本中明文处理登录密码的安全问题,但我对这种密钥登录方式不太了解,具体怎么配置呀,像Windows Server 2016 安装OpenSSH Server,并设置密钥这篇文章中“设置密钥登录”段落说的那样吗,编辑修改C:\ProgramData\ssh目录下的sshd_config配置文件,找到#PubkeyAuthentication yes ,去掉注释启用公钥认证?





但是在OpenSSH Server主机C:\ProgramData\ssh目录下没有这个administrators_authorized_keys文件,怎样把SSH客户端运行plink.exe连接密钥添加到这个文件中呀,可以纯手动复制粘贴吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
eikeime 发表于 2024-7-5 14:26 | 显示全部楼层
红色狂想  楼主| 发表于 2024-7-6 15:25 | 显示全部楼层
eikeime 发表于 2024-7-5 14:26
https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement

这篇文档也有简体中文的,OpenSSH for Windows 中基于密钥的身份验证

按照上面介绍的方法ssh-keygen -t ed25519成功生成了密钥对,然后用ssh命令将id_ed25519.pub公钥上传到了远程OpenSSH Server主机上,此时在C:\ProgramData\ssh目录下已经有administrators_authorized_keys这个文件了,详见下图:



但是我运行以下PowerShell脚本代码建立SSH连接时,却提示Unable to use key file "C:\ProgramData\ssh\id_ed25519" (OpenSSH SSH-2 private key (new format)),难道SSH2协议不支持高级别Ed25519格式的密钥身份验证吗?
  1. $SCRIPT_PATH = $MyInvocation.MyCommand.Path
  2. $DIR_PATH = Split-Path -Parent $SCRIPT_PATH
  3. $PLINKPATH = Join-Path -Path $DIR_PATH -ChildPath "plink.exe"

  4. $privateKeyPath = "C:\ProgramData\ssh\id_ed25519"
  5. $user_name = "Administrator"
  6. $host_name = "192.168.0.189"
  7. $plinkArgs = "-ssh -i $privateKeyPath -l $user_name $host_name shutdown /s /t 0"
  8. Start-Process -FilePath $PLINKPATH -ArgumentList $plinkArgs
复制代码

总是弹出交互提示让输入密码,我的远程OpenSSH Server主机是Windows 10 Enterprise 2016 LTSB,OpenSSH Client系统是Windows Server 2019 Datacenter

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部