【问题标题】:SSH / rsync / scp with username and password (and host) as parametersSSH / rsync / scp 以用户名和密码(和主机)作为参数
【发布时间】:2015-10-04 08:42:52
【问题描述】:

我正在研究如何最好地创建一个接受用户名、密码和主机作为输入的 bash 脚本,然后可以使用 ssh/rsync/scp 进行连接。这些程序似乎只接受用户通过提示输入的密码。

注意:我非常熟悉 SSH 密钥 - 我的用例是这样一种情况,即希望以编程方式将 SSH 密钥放置到不存在密钥的服务器上。

我目前的解决方案是使用expect 以正确的密码回答密码提示(并提供所有其他信息作为参数)。

https://gist.github.com/elnygren/965a6db4f3fd8e242e90

【问题讨论】:

  • 您可能还对复制 ssh 密钥的ssh-copy-id [user@]machine 感兴趣(是的,它会提示您输入密码)。
  • @meuh 来放大您的评论,您只需为每台目标机器运行一次ssh-copy-id。因此,虽然它会提示输入密码,但您可以一次完成所有操作,而不必再担心它们。
  • 这些都是好点;但是我的用例是在一个自动化脚本中,其中创建了许多服务器,并且我在创建过程中收到了每个服务器的 root 密码(在 API 响应中)。每个服务器的密码都不同。不过,在期望脚本中使用 ssh-copy-id 可能会很有趣……

标签: bash shell ssh rsync scp


【解决方案1】:

如果您不介意您的密码对其他用户可见,您可以使用sshpass 建议in this answer

sshpass -p<password> ssh <arguments>

【讨论】:

  • sshpass 是我考虑过的;但是,它并不随大多数系统一起提供,并且会成为我的用户安装的额外依赖项。不过,它似乎很适合这份工作,大多数包经理都有。有趣的是,由于安全隐患,Homebrew (OSX) 决定将其排除在外。
  • 它确实具有安全隐患,例如使密码对机器上的其他用户可见。 OS X 的 macports 仍然有 sshpass。
【解决方案2】:

此类工作(通过 SSH 连接任何东西,无论是 ssh 本身、scp 还是 rsync)的最佳解决方案是使用密钥进行身份验证。

然后您可以将您的密钥添加到身份验证管理器(或者不使用密码,但要小心!)并使用它连接到主机。

【讨论】:

  • 你是对的,显然是对的。但是,如果服务器没有任何公钥怎么办?我正在开发一个自动化脚本,该脚本创建新服务器并在创建时从 API 接收 root 密码。
  • 当然,如果存在密钥,最好使用它们。但是我不明白 OP 如何通过假设这些密钥已经存在来解决“我的用例是一种情况,即人们希望以编程方式将 SSH 密钥放置到密钥不存在的服务器上”。
  • @tomsv 我真的应该习惯在回答之前完全阅读问题......
猜你喜欢
  • 2018-09-13
  • 1970-01-01
  • 2013-07-30
  • 2017-07-15
  • 1970-01-01
  • 2019-06-29
  • 2014-07-29
  • 1970-01-01
相关资源
最近更新 更多