我们希望通过 SSH 在 powershell 脚本中在我们的网络设备上运行命令。我知道我们可以这样做:
ssh [email protected]
但这是交互式的,需要您将 RSA 密钥接受到已知主机等中。因此,我们过去使用 PoshSSH 作为模块来实现我们的目标。但我们在使用 PoshSSH 时遇到了一些问题,并且经过这么多年,我们想知道 powershell 中是否有一个原生解决方案可以在不安装模块的情况下实现相同的结果?
答案1
但这是交互式的,需要您将 RSA 密钥接受到已知主机等中。
假设这些设备不是全新的,它们的 RSA 主机密钥将是静态的,这意味着你可以(我想说应该)保留一个持久的known_hosts文件,以供您的脚本使用。
收集所有设备的主机密钥(ssh-keyscan
如果需要则使用),将文件放在网络共享上(或脚本旁边),ssh -o GlobalKnownHostsFile=
以便每个人的脚本都可以访问它。
(主机密钥是一种安全措施——如果你的脚本只是盲目地将密码发送到任何未知的设备,那么如何阻止某人用收集收到的密码的设备替换设备,并获得潜在的访问权限全部您的网络中是否存在此类设备?
另一个交互源是密码输入,但也可以使用上传到所有设备的 RSA 用户密钥对来解决。
powershell 中是否存在无需安装模块即可实现相同结果的本机解决方案?
不是;微软选择将 OpenSSH 与 Windows 捆绑在一起,而不是创建自己的 SSH 客户端实现 – 甚至 PSRemoting-over-SSH 也使用该ssh
程序。
答案2
但这是交互式的,需要你接受 RSA 密钥进入已知主机等
你读过手册吗?。MS-Windows 上的命令ssh
是 openssh 客户端,它提供了极大的灵活性。如果您不想让它验证主机密钥,那么就告诉它不要验证主机密钥。如果您想在 ssh 会话中运行特定命令,那么就指定要在 ssh 会话中运行的命令。
ssh -o StrictHostKeyChecking=no [email protected] pwd