在bash脚本中的变量中捕获SSH输出

时间:2019-12-17 08:47:52

标签: linux bash ssh scripting

我正在尝试通过SSH连接到另一台计算机,并将其IP地址和主机名插入一个变量。

但是,当我回声它的时候,它似乎是空的。

  

我已经尝试了其他帖子的答案,但是并不能解决我的问题。我不知道是什么问题。

#!/bin/bash

FILE=/home/admin/Vishal/output.txt
input=host.txt

while IFS= read -r line
do 
echo "$line"
if [ $line = $HOSTNAME ]
then

ip=`hostname -i`
domain=`hostname -A`
host=`hostname`
sudo echo $ip $domain $line localhost >> $FILE

else
output=$(ssh -i -t admin@$line  << "ENDSSH"

ip2=`hostname -i`
domain2=`hostname -A`
host2=`hostname`
ENDSSH
)
echo $output
fi

done <"$input"

输入文件包含主机名列表

变量 FILE 包含要存储结果的文件的路径。

可变的输出是我要存储结果的那个。

注意:如果不需要ssh,该脚本适用于第一部分。

1 个答案:

答案 0 :(得分:1)

仅此命令与您的问题有关:

output=$(ssh -i -t admin@$line  << "ENDSSH"

ip2=`hostname -i`
domain2=`hostname -A`
host2=`hostname`
ENDSSH
)

该命令设置了一些变量,但未产生任何输出,因此,预计output不包含您的值。

如果您确实希望三行具有hostname相关的值,那么类似这样的简单事情应该起作用

output=$(ssh admin@$line "hostname -i; hostname -A; hostname")