【问题标题】:How to automate password entry?如何自动输入密码?
【发布时间】:2012-02-26 08:10:31
【问题描述】:

我想在计算机列表(Jenkins 节点)上安装软件库 (SWIG)。我正在使用以下脚本来自动执行此操作:

NODES="10.8.255.70 10.8.255.85 10.8.255.88 10.8.255.86 10.8.255.65 10.8.255.64 10.8.255.97 10.8.255.69"
for node in $NODES; do 
  scp InstallSWIG.sh root@$node:/root/InstallSWIG.sh
  ssh root@$node sh InstallSWIG.sh
done

这种方式是自动化的,除了 scp 和 ssh 命令都会出现密码请求。

有没有办法以编程方式输入密码?

安全不是问题。我正在寻找不涉及 SSH 密钥的解决方案。

【问题讨论】:

    标签: bash shell ssh automation


    【解决方案1】:

    这是一个 expect 示例,sshs 进入 Stripe’s Capture The Flag server 并自动输入密码。

    expect <<< 'spawn ssh level01@ctf.stri.pe; expect "password:"; send "e9gx26YEb2\r";'
    

    【讨论】:

      【解决方案2】:

      使用 SSH 的正确方法是使用密钥。

      # ssh-keygen
      

      然后将 *~/.ssh/id_rsa.pub* 文件复制到远程机器 (root@$node) 到远程用户的 .ssh/authorized_keys 文件中。

      【讨论】:

      • “安全不是问题。我正在寻找不涉及 SSH 密钥的解决方案。”
      【解决方案3】:

      您可以使用 empty 执行任务,这是一个来自 sourceforge 的小型实用程序。它类似于期望,但在这种情况下可能更方便。安装完成后,您的第一个 scp 将通过以下两个命令完成:

      ./empty -f scp InstallSWIG.sh root@$node:/root/InstallSWIG.sh
      echo YOUR_SECRET_PASSWORD | ./empty -s -c
      

      第一个在后台启动你的命令,让它认为它在终端上以交互模式运行。另一个从标准输入向它发送数据。当然,将密码放在命令行的任何位置都是有风险的,因为 shell 历史记录被保留,用户可以在ps 结果中看到它等。也不安全,但更好的办法是将密码存储在文件中并从该文件重定向第二个命令的输入,而不是使用 echo 和管道。

      复制到服务器后,可以类似的方式运行脚本:

      ./empty -f ssh root@$node sh InstallSWIG.sh
      echo YOUR_SECRET_PASSWORD | ./empty -s -c
      

      【讨论】:

        【解决方案4】:

        您可以考虑为此设置无密码 ssh 密钥。 Establishing Batch Mode Connections between OpenSSH and SSH2 是一个起点,您可以在网上找到很多关于此主题的信息。

        【讨论】:

          【解决方案5】:

          Wes 的答案是正确的,但如果您热衷于肮脏和缓慢的事情,您可以使用 expect 自动执行此操作。

          【讨论】:

            猜你喜欢
            • 2021-08-21
            • 2013-04-09
            • 2022-08-18
            • 2017-01-30
            • 2012-07-04
            • 1970-01-01
            • 2021-05-12
            • 1970-01-01
            • 2015-05-03
            相关资源
            最近更新 更多