我需要一个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'
答案 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文件)。