如何在ssh远程机器下执行命令并解析json值



我有一个json格式的文件,位于远程机器/tmp及其上下文如下

{
"data": {
"room.number": "1111",
"name": "student",
"phone": "1234-5678"
},
"type": "XXX",
"car": "toyota"
}

我使用以下命令连接到远程并尝试解析该值。我可以得到name的值,但不能得到空间。数值成功。

当我直接在远程机器终端上运行命令时,两个命令都是工作的。

root@remote-machine:/tmp# jq -r '.data.name' /tmp/ca.json.1
student
root@remote-machine:/tmp# jq -r '.data."room.number"' /tmp/ca.json.1
1111

回到我的本地机器,房间。数字为空

root@local-machine:~# ssh -o "StrictHostKeyChecking=no" -i /root/.ssh/id_rsa $ACCOUNT@$TARGET_IP -t 'sudo su - -c "jq -r '.data.name' /tmp/ca.json.1"'
student
root@local-machine:~# ssh -o "StrictHostKeyChecking=no" -i /root/.ssh/id_rsa $ACCOUNT@$TARGET_IP -t 'sudo su - -c "jq -r '.data."room.number"' /tmp/ca.json.1"'
null

我应该如何修改我的命令,然后我可以得到空间。数量值?

您可以这样做:

ssh -o "StrictHostKeyChecking=no" -i /root/.ssh/id_rsa $ACCOUNT@$TARGET_IP -t "sudo su - -c "jq -r '.data.\"room.number\"' /tmp/ca.json.1""

解释最初我们有以下命令

ssh [other-flags] -t "sudo su - -c "jq -r '.data.\"room.number\"' /tmp/ca.json.1""

因此ssh调用双引号中的命令并替换所有转义字符。因此,"变为",\变为。因此,将执行的内部命令看起来像:

sudo su - -c "jq -r '.data."room.number"' /tmp/ca.json.1"

现在sudo再次调用双引号中的命令,因此转义字符再次被替换:"更改为",最终执行的命令变为:

jq -r '.data."room.number"' /tmp/ca.json.1

这正是我们想要执行的命令!

最新更新