期望脚本SSH不成功

时间:2015-04-21 17:58:11

标签: ssh expect

我制作了两个剧本:

这个获取IP地址&主机名:

#!/bin/bash
for i in `cat ~/script/hosts.txt`
do HOSTNAME=`echo $i|awk -F: '{print $1}'`
IP=`echo $i|awk -F: '{print $2}'`
TIMESTAMP=`date +%Y-%m-%d`
~/script/expect.sh $HOSTNAME $IP
done

这个SSH进入设备:

#!/usr/bin/expect
set timeout 20
set HOSTNAME [lindex $argv 0]
set IP [lindex $argv 1]
exp_internal 1
spawn ssh -o StrictHostKeyChecking=no root@$IP
exit

我想制作一个脚本来实现多种设备配置。 问题是由于以下错误导致SSH失败:

$ ./main.sh
spawn ssh -o StrictHostKeyChecking=no root@10.102.82.235
: Name or service not knownname 10.102.82.235
spawn ssh -o StrictHostKeyChecking=no root@10.102.82.239
: Name or service not knownname 10.102.82.239

当我调试时,我看到以下错误

spawn id exp4 sent <ssh: Could not resolve hostname 10.102.82.235\r\r: Name or                                                          
service not known\r\r\n>
: Name or service not knownname 10.102.82.235

我认为问题在于这些字符:&#34; \ r \ n&#34;,&#34; \ r \ n \ r \ n&#34; 有什么方法可以过滤掉这些吗?

1 个答案:

答案 0 :(得分:0)

不是答案,但您的shell脚本可以使用很多改进:

#!/bin/bash
while IFS=: read -r host ip; do
    timestamp=$(date +%Y-%m-%d %T)
    ~/script/expect.sh "$host" "$ip"
done <  ~/script/hosts.txt

注意:

  • 请勿使用for line in `cat file`读取文件的行 - for循环从文件中读取
  • 使用$(...)进行命令替换,而非`...` - 提高可读性,并且易于嵌套
  • 请勿使用UPPERCASE_VARIABLES - 这些内容应保留给shell使用。
  • 您的(未使用过的)TIMESTAMP变量实际上包含日期,没有时间。
  • 引用您的"$variables",除非您可以解释为什么您希望它们不加引号。