使用密码自动化SSH登录的Shell脚本

6

我正在尝试通过密码自动化 SSH 登录。我不能使用 expect 命令或 sshpass 等。所以我只能直接使用密码。

在谷歌上进行了大量研究,但没有找到解决方案... :(

请帮助我解决这个问题。

我尝试的代码是:

#!/bin/bash
USERNAME=user1
PASSWORD=abcd1234
HOSTS="server01.mat.us"
ssh ${HOSTS} -l ${USERNAME} -p ${PASSWORD}
2个回答

17

OpenSSH ssh 工具不支持在命令行或标准输入中输入密码。同样适用于 scpsftp 文件传输工具,它们会调用 ssh 建立 SSH 连接。我认为这是 OpenSSH 开发者故意做出的决定。你可以选择以下选项:

  1. 使用SSH 密钥进行身份验证,而不是密码。
  2. 使用sshpassexpect 或类似工具通过 TTY 调用 ssh 并自动响应密码提示。
  3. 使用 (滥用) SSH_ASKPASS 特性,通过运行另一个程序让 ssh 获取密码,详见这里这里,或在这里的某些答案中。
  4. 请 SSH 服务器管理员启用基于主机的身份验证并使用该功能。请注意,基于主机的身份验证仅适用于某些网络环境。请参阅这里这里的附加说明。
  • 使用 Perl、Python、Java 或者你最喜欢的编程语言编写自己的 ssh 客户端。现代编程语言中大多数都有 ssh 客户端库,而且你可以完全掌控客户端如何获取密码。
  • 下载 ssh 源代码 并构建一个修改版的 ssh,使其按照你的意愿工作。
  • 使用另一款 ssh 客户端。有很多免费和商业的其他 ssh 客户端可供选择。其中某个可能比 OpenSSH 客户端更适合你的需求。

  • 谢谢Kenster.... :) 但我没有使用SSH密钥、sshpass或expect等选项的选择,所以除了这些之外,我们还有其他自动化上述SSH案例的方式吗?请告诉我。 - Sankar
    plink 添加到该列表中。它可以将密码作为参数传递(即使从安全的角度来看,这样做是一个非常糟糕的想法!) - salva
    @salva 技术上讲,这属于“其他SSH软件包”选项。我不想推荐/列出可用的替代软件包。此外,OP没有说明他在哪个平台上。 - Kenster
    plink 可在 Windows 和 Linux/UNIX 系统中使用。 - salva
    你能展示一个 plink 的例子吗?每个人都被重定向到这个答案,但没有人分享 plink 的样例。有些情况下,远程公司没有预算来设置基于 SSH 密钥的登录。 - user285594

    -1

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接