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