【问题标题】:Capturing SSH Output in a variable in a bash script在 bash 脚本的变量中捕获 SSH 输出
【发布时间】:2019-12-17 16:56:21
【问题描述】:

我正在尝试通过 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 包含要存储结果的文件的路径。

output 变量是我想要存储结果的变量。

注意:该脚本适用于不需要 ssh 的 if 的第一部分。

【问题讨论】:

    标签: linux bash ssh scripting


    【解决方案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")
    

    【讨论】:

    • 我如何获得输出?你能详细说明一下吗?
    最近更新 更多