Bash脚本 - 连接到远程服务器并获得结果

时间:2016-04-11 18:14:14

标签: linux bash shell

我正在尝试编写一个连接到远程服务器的脚本,ping其他服务器(IP作为参数)并输出结果。

所以这就是我写的:

#!/bin/bash
# IP as argument
IP=$1
# Remote connection
ssh -p 22 pinger@tester.myserver.com
# Pinging and saving only latency results to RESULT
RESULT=`ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print $7}' | cut -b 6-12`
# Outputs the result    
echo $RESULT

但是我收到了一个错误:

Name or service not known name tester.myserver.com

当然tester.myserver.com只是示例,但如果我用我的真实远程服务器地址手动输入该ssh命令,它确实有用。所以我真的不知道为什么这不能用作脚本。

2 个答案:

答案 0 :(得分:2)

将相应的行更改为:

RESULT=`ssh pinger@tester.myserver.com "ping -i 2 -c 4 ${IP}" | grep icmp_seq | awk '{print $7}' | cut -b 6-12`

或没有awk:

RESULT=`ssh pinger@tester.myserver.com "ping -i 2 -c 4 ${IP} | grep icmp_seq | sed 's/^.*time=\([0-9.]\+\).*/\1/'"`

问候

答案 1 :(得分:1)

因此,发送要在远程服务器上执行的命令或命令列表的常用方法如下:

ssh user@remote.server "<your commands go here>"

或在你的情况下:

ssh -p 22 pinger@tester.myserver.com "ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print \$7}' | cut -b 6-12"

注意&#34; \&#34;在7美元之前逃避&#34; $&#34;。这可以防止在运行ssh命令时将$ 7计算为局部变量$ 7(可能设置或不设置),将$ 7与其他命令保持在正确的上下文中。

你仍然需要为它设置$ IP才能工作,所以一起看起来像这样:

IP = $1
ssh -p 22 pinger@tester.myserver.com "ping -i 2 -c 4 $IP | grep icmp_seq | awk '{print \$7}' | cut -b 6-12"

现在$ IP在本地解析,而$ 7则远程解析。

当我尝试连接到远程服务器以运行某些命令并使用本地变量时,我有a similar problem to yours - 就像你使用$ IP一样。