如何通过ssh执行命令并将值存储在变量中

时间:2014-08-05 20:51:31

标签: linux shell ssh

我试图通过ssh从远程计算机获取uname -r的值,并在我的本地脚本流中使用该值。

kern_ver=uname -r
sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@$c 'kern_ver=echo \$kern_ver'

但看起来这个值没有传递回本地脚本流。

2 个答案:

答案 0 :(得分:4)

将命令存储在变量cmd中是可选的;您可以将命令硬编码为ssh的字符串参数。关键是你只需通过ssh在远程主机上运行命令,并在本地主机上捕获它的输出。

cmd="uname -r"
kern_ver=$(sshpass -p "$passwd" ssh -o StrictHostKeyChecking=no root@"$c" "$cmd")

答案 1 :(得分:1)

一如既往地捕获var=$(...)

ssh有点有趣,因为它无条件地调用远程shell,因此使用完全任意的命令(而不是像uname -r这样的简单事物)需要不同的技术:

filename="/path/to/name with spaces/and/ * wildcard characters *"
printf -v cmd_str '%q ' ls -l "$filename"
output=$(ssh "$host" "$cmd_str")

这样你可以使用带空格的参数,并且它们将通过正确的引用传递给远程系统(但需要注意的是,不可打印的字符可能只用bash语法引用,所以这只能保证在远程shell也是bash的情况下工作。