【问题标题】:How to use ssh command in shell script?如何在 shell 脚本中使用 ssh 命令?
【发布时间】:2011-04-25 17:21:39
【问题描述】:

我知道我们应该这样做 ssh 用户@目标 但是我们在哪里指定密码?


嗯,感谢您的所有回复。 我的要求是我必须在不同的机器上启动一些服务器。所有服务器都应该使用一个 shell 脚本启动。好吧,每次都输入密码似乎有点糟糕,但我想我将不得不求助于该选项。我不想保存公钥的一个原因是我可能不会每次都连接到同一台机器。不过,返回并修改脚本以更改目标地址很容易。

【问题讨论】:

  • 我很困惑:如果您的密钥都在各自的机器上,那么您就有可能在没有密码的情况下调用它们(假设您没有将密码与密钥相关联)。这并不意味着您必须使用密钥连接到每台机器。

标签: ssh shell


【解决方案1】:

最好的方法是生成一个私钥/公钥对,并将您的公钥存储在远程服务器上。这是一种无需每次输入密码即可安全登录的方式。 Read more here

【讨论】:

  • 对于那些在 Windows 上的用户,我推荐使用“putty”工具集。对于这种情况,选美工具将处理密钥管理。 pgombardo 给出了在 *nix 上使用公钥认证的概述。我已经在 linux 上设置了很多次,有时这可能是一个挑战。如果您在设置时遇到具体问题,请在此处发布
  • 我认为链接已损坏。
【解决方案2】:

出于安全原因,这不能使用简单的 ssh 命令完成。如果你想通过 ssh 使用密码路由,如果你坚持的话,下面的链接显示了一些脚本来解决这个问题:

Scripts to automate password entry

【讨论】:

    【解决方案3】:

    ssh 命令将提示您输入密码。在命令行上指定密码是不安全的,因为执行的完整命令通常是世界可见的(例如 ps aux),并且还会以纯文本格式保存在命令历史文件中。任何编写良好的程序(包括 ssh)都会在必要时提示输入密码,并且会禁用电传回显,使其在终端上不可见。

    如果您尝试从 cron 或后台执行 ssh,请使用 ssh-agent

    【讨论】:

      【解决方案4】:

      我过去这样做的方式只是设置一对身份验证密钥。

      这样,您无需指定密码即可登录,并且可以在 shell 脚本中使用。这里有一个很好的教程:

      http://linuxproblem.org/art_9.html

      【讨论】:

        【解决方案5】:

        SSH 密钥是标准/建议的解决方案。必须为运行脚本的用户设置密钥。

        对于该脚本用户,查看您是否在 ~/.ssh/ 中设置了任何密钥(密钥文件将以 .pub 扩展名结尾)

        如果您没有任何密钥设置,您可以运行:

        ssh-keygen -t rsa
        

        这将生成 ~/.ssh/id_rsa.pub(-t 选项也有其他类型)

        然后您可以将此文件的内容复制到远程计算机上的 ~(remote-user)/.ssh/authorized_keys。

        作为脚本用户,您可以通过以下方式测试它是否有效:

        ssh remote-user@remote-machine
        

        您应该在没有密码提示的情况下登录。

        同理,现在当您的脚本从该用户运行时,它可以自动通过 SSH 连接到远程计算机。

        【讨论】:

          【解决方案6】:

          如果你真的想用密码认证,可以试试expect。示例见here

          【讨论】: