【问题标题】:shell Script with SSH with one time password to connect multiple hosts [duplicate]带有SSH的shell脚本,使用一次性密码连接多个主机[重复]
【发布时间】:2016-06-01 00:38:00
【问题描述】:

我想编写一个shell脚本来连接多个linux主机并收集服务器端信息/监控细节。

由于我需要为给定的服务器列表使用 ssh 用户名@主机名,我只是想知道我可以一次性输入/硬编码密码并阻止 ssh 命令提示每个 ssh 命令的密码。

我对所有服务器使用相同的密码。

我写了一个 shell 脚本,但它不断提示我在循环中输入 ssh 命令的密码。

【问题讨论】:

  • 这就是为什么他们有ssh-agent 用于此类用例。根据您使用的操作系统平台,ssh-agent 可能已经安装。
  • “一次性密码”是一个艺术术语,与您的问题非常无关。您可能想使用不同的术语。
  • 顺便说一句,要求“尽快”回答或将问题标记为紧急被认为是粗鲁的。另见catb.org/esr/faqs/smart-questions.html#urgent

标签: shell ssh rsa


【解决方案1】:

尝试使用sshpass

sshpass -p "password" ssh -o StrictHostKeyChecking=no user@server

或者使用公钥认证(你将通过一对没有密码提示的密钥建立ssh连接):

ssh-keygen -t rsa 
ssh-copy-id user@server

【讨论】:

  • 在命令行上传递密码非常不安全——命令行对系统上的所有其他进程都是可见的。即使sshpass在启动后覆盖了命令行,仍然有机会。
  • ...甚至sshpass -f <(printf '%s\n' "$password") 会更好(因为printf 是内置的shell,它不会在其argv 上运行带有密码的外部命令)。
【解决方案2】:

Stanley R 的答案很好。

另外,请考虑使用 ControlMaster,这应该会使您的脚本运行得更快,因为您避免了每次连接的成本。作为副作用,它应该意味着您只需要登录一次,因此它会侥幸解决您的问题。

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

【讨论】:

  • 这对于到一个主机的多个连接是有意义的,但对于多个远程主机来说,这是每个主机一个连接。
猜你喜欢
  • 2011-09-05
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2021-12-14
  • 2016-06-20
  • 2012-04-06
相关资源
最近更新 更多