【问题标题】:Installing java on linux using ssh使用 ssh 在 linux 上安装 java
【发布时间】:2018-10-09 19:27:37
【问题描述】:

我想在多台使用 ssh 的计算机上安装 java,所以我想编写一个 bash 脚本(大致):

for c in computers
do    
   scp jre--.rpm $c
   ssh $c 'sudu -s; chmod a+x jre--.rpm ; ./jre--.rpm; echo "success!"'
done

问题是在java安装过程中我需要“阅读”通知并在最后输入“yes”。我该怎么做?有比“期望”更简单的方法吗?如果不是,我如何将它放入 bash 脚本中?

非常感谢

【问题讨论】:

标签: linux bash ssh rpm expect


【解决方案1】:

首先,将必要的击键记录到一个文件中,如下所示:

cat > keystrokes

当您完成击键记录时,按 Ctrl+C。检查文件内容。某些键(如 TAB)可能无法正确记录,但您仍然可以使用文本编辑器编辑文件。请注意,在控制台上向下滚动(例如,从 more 读取输出时)通常可以使用空格键来完成。

您可以像使用 rpm 一样对这个文件进行 scp。接下来,将击键文件的内容通过管道传输到安装程序的标准输入:

cat keystrokes | ./someinstaller

编辑:很抱歉听到它不起作用。也许你可以看看expect,这是一个专为这类事情设计的Unix工具。我认为它包含在大多数 gnu/linux 发行版中。如果你熟悉 python,你可能更喜欢pexpect

【讨论】:

  • 这几乎可以工作,但并不完全。似乎只有在我手动按空格键后才能听到输入。
【解决方案2】:

期望是要走的路(感谢http://www.dnmouse.org/java.html):

   for c in computers
   do    
       scp jre--.rpm $c
       ssh -t $c 'sudo -s; yum -y install expect; sudo chmod a+x jre--.rpm'
       ssh -t $c '/usr/bin/expect -c \
       "set timeout -1; spawn ./jre-6u13-linux-x64-rpm.bin; sleep 1; send -- q\r; sleep 1; send -- yes\r; expect eof"
       echo "success!"'
   done

【讨论】:

    猜你喜欢
    • 2016-09-27
    • 2018-06-02
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多