脚本中的SSH - 命令未在远程服务器上运行

时间:2015-03-13 14:53:42

标签: bash shell

我需要一个bash脚本的帮助,它以root身份连接到服务器,执行一些命令然后从服务器退出。

我试过这个脚本,但是当登录到服务器时执行命令没有运行!

#!/bin/bash

sudo ssh -o ConnectTimeout=10 $1 'exit'

if [ $? != 0 ]; then
        echo "Could not connect to $1 , script stopped"
        exit
fi

sudo ssh $1

echo "SRV=`cat /etc/puppet/puppet.conf | grep -i srv_domain | awk '{print $3}'`"
echo $SRV
echo "puppetMaster=`host -t srv _x-puppet._tcp.$SRV | head -1 | awk '{print $8}' | cut -f1 -d"."`"
echo $puppetMaster
'exit'

3 个答案:

答案 0 :(得分:1)

脚本中的ssh machine后面的命令不在计算机上运行。一旦ssh退出,它们将在本地计算机上运行。

指定要作为ssh的参数运行的命令,或者运行ssh并使其从标准输入读取命令,并将命令发送给它。

ssh machine ls
# or
echo ls | ssh machine

答案 1 :(得分:1)

我很惊讶没有人提出过heredoc。

sudo ssh "$1" <<'EOF'
SRV=`cat /etc/puppet/puppet.conf | grep -i srv_domain | awk '{print $3}'`
echo $SRV
echo "puppetMaster=`host -t srv _x-puppet._tcp.$SRV | head -1 | awk '{print $8}' | cut -f1 -d"."`"
echo $puppetMaster
EOF

这将从<<'EOF'到以EOF开头的行到ssh的标准输入,从远程shell接收并运行。

答案 2 :(得分:0)

你似乎对于在哪里运行而感到有点困惑。

ssh -o ConnectTimeout=10 $1 'exit'

将连接到$ 1,运行退出并断开连接。

ssh -o ConnectTimeout=10 $1 'echo hello world' 

将打印你好世界 服务器然后断开连接。

ssh $ 1

将在遥控器上打开一个shell。 shell结束后,以下命令将在本地运行。

echo "SRV=`cat /etc/puppet/puppet.conf | grep -i srv_domain | awk '{print $3}'`"
echo $SRV
echo "puppetMaster=`host -t srv _x-puppet._tcp.$SRV | head -1 | awk '{print $8}' | cut -f1 -d"."`"
echo $puppetMaster
'exit'

你可能想要的是在遥控器上启动bash并向前转发你想通过stdin给它的命令。

echo "my commands" | ssh $1 bash

从技术上讲,你不需要bash - 即使没有它,ssh也会启动bash(但是使用不同的rc文件)。

相关问题