【问题标题】:Enter commands at the right time in a bash script在 bash 脚本中在正确的时间输入命令
【发布时间】:2015-10-10 16:15:49
【问题描述】:

我有一个 bash 脚本,它运行一些命令。这些命令接受输入,我希望能够自动执行此操作,因为输入始终相同。

是否可以在需要时一次发送这些线路?

Y
{JustPressEnter}
{JustPressEnter}
{JustPressEnter}
yes
APassword

完整的命令是这个(实际IP被删除)

apt-get install ssh-client \
    && mkdir /var/www/.ssh/ \
    && chown www-data:www-data /var/www/.ssh/ \
    && sudo -u www-data ssh-keygen -t rsa \
    && cat /var/www/.ssh/id_rsa.pub | ssh root@1.2.3.4 'cat >> .ssh/authorized_keys' \
    && sudo -u www-data touch /var/www/.ssh/known_hosts \
    && sudo -u www-data ssh-keygen -R 1.2.3.4 \
    && sudo -u www-data ssh-keyscan -H 1.2.3.4 >> /var/www/.ssh/known_hosts

【问题讨论】:

    标签: bash


    【解决方案1】:

    两个不同的答案:

    • 使用expect 自动执行命令。 This answer 显示了 expect 用于通过密码输入自动化 apt-get 的示例。 Here 是一篇详细讨论 expect 的文章。

    • 以批处理模式编写每个命令。 ssh-keygen 可以接受所有这些东西作为参数; apt-get install -y packagename 将在每次提示时假定“是”。如果您正确编写代码,则无需进行键盘交互。

    【讨论】:

    • 谢谢:)。我使用了-y apt-get 标志,并设法使用参数对ssh-keygen 进行了排序。我现在要做的就是将密码自动输入到 ssh 命令中。我会看看 expect 并尝试让它与它一起工作。
    猜你喜欢
    • 2021-03-23
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多