【问题标题】:How do I pass a set of bash commands through SSH? [duplicate]如何通过 SSH 传递一组 bash 命令? [复制]
【发布时间】:2018-09-12 02:36:13
【问题描述】:

我正在编写一个在本地机器上运行的简单 bash 服务器健康检查,并询问用户他们有兴趣查看哪个服务器。提供名称后,脚本会在该服务器上运行一组运行状况检查命令并将输出返回给用户。目前,该脚本只会将用户登录到服务器,但在用户退出该 ssh 会话之前不会运行健康检查,然后它会在本地运行这些检查,而不是按预期在远程服务器上运行。我不希望用户实际登录到服务器,我只需要将该服务器的输出转发到用户本地控制台。任何线索我在这里做错了什么?提前致谢!

#!/bin/bash
echo -n "Hello "$USER""
echo "which server would you like to review?"
read var1
ssh -tt $var1
echo ">>> SYSTEM PERFORMANCE <<<"
top -b -n1 | head -n 10
echo ">>> STORAGE STATISTICS <<<"
df -h
echo ">>> USERS CURRENTLY LOGGED IN <<<"
w
echo ">>> USERS PREVIOUSLY LOGGED IN <<<"
lastlog -b 0 -t 100

【问题讨论】:

    标签: linux bash


    【解决方案1】:

    使用 here-doc

    #!/bin/bash
    echo -n "Hello "$USER""
    echo "which server would you like to review?"
    read var1
    ssh -t $var1<<'EOF'
    echo ">>> SYSTEM PERFORMANCE <<<"
    top -b -n1 | head -n 10
    echo ">>> STORAGE STATISTICS <<<"
    df -h
    echo ">>> USERS CURRENTLY LOGGED IN <<<"
    w
    echo ">>> USERS PREVIOUSLY LOGGED IN <<<"
    lastlog -b 0 -t 100
    EOF
    

    【讨论】:

    • 我认为我们在这里绝对是正确的。但是,现在,输出也显示了原始命令。当我在没有 EOF 的情况下在本地运行脚本时,它显示干净,没有显示命令。有什么想法可以解决吗?非常感谢。
    • -tt 中删除了一个t(仅玩这个还不够)
    • 成功了!谢谢吉尔斯!
    【解决方案2】:

    有一个工具广泛用于所有类别的远程访问(通过 ssh 和/或 telnet、http 等),称为 expect(1) 它允许您发送命令并等待响应,甚至允许使用交互式命令(如屏幕模式下的vi(1))甚至在线提供密码。用谷歌搜索一下,你会发现它有多么有用。

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多