如何通过SSH传递一组bash命令?

时间:2018-04-02 20:57:36

标签: linux bash

我正在编写一个在本地计算机上运行的简单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

2 个答案:

答案 0 :(得分:2)

使用 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

答案 1 :(得分:0)

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