为了在任何服务器上执行任何操作时不必输入密码,我需要将我的 ssh 证书上传到远程:
ssh-copy-id CptBartender@remote
现在...我需要将该证书上传到 400 多台服务器,并且我正在尝试找到一种方法来避免多次输入/粘贴密码。
问题是:如何在 Windows 上 (使用 MinGW) 实现自动化?Cygwin 很可能不是一个选择,因为它似乎位于来自地狱的强大公司防火墙后面。
到目前为止我已经:
- 创建了一个可以遍历每个远程设备的脚本,但它要求输入每个远程设备的密码
- 尝试通过密码,但
yes
没有成功 - 阅读有关
expect
,但找不到让它在 MinGW 上运行的方法 - 阅读
sshpass
- 相同expect
我已经考虑过AutoIt
这个问题,但肯定有更好的方法......
答案1
PuTTYplink
可以接受密码作为命令行参数。它没有直接等效于ssh-copy-id
,但可以轻松编写脚本,例如通过手动运行命令...
plink foo@bar -pw baz "mkdir -p ~/.ssh && echo 'ssh-ed25519 AAAA...' >> ~/.ssh/authorized_keys"
...或者通过使用 上传文件pscp
。
此外,如果expect
它不能在 Windows 上运行,你肯定可以在那 400 台 Linux 服务器中的一台上运行它吧?
(此外,考虑到这些数字,也许您应该考虑从 LDAP 中提取密钥,或者使用 AD/Kerberos?最近的 OpenSSH 版本具有用于 LDAP 集成的钩子,而不再需要第三方补丁。)
答案2
您可以查找上面提到的 Putty plink 工具。或者您可以考虑将来使用配置管理系统之一,例如 Puppet、Ansible 或 Chef。您可以使用其中任何一个系统立即将一些证书添加到您的所有服务器。
寻找您的服务器编号我认为您需要认真考虑一下。它们可用于大多数常规服务器管理任务,包括用户管理、文件和目录管理以及软件。