在 ssh 中获取远程值

在 ssh 中获取远程值

我有以下脚本:

ssh ip@host /bin/bash << EOF
hostname # Print the remote hostname
A=`hostname`
echo \${A} # Print the local hostname
EOF

我想从远程服务器获取值并将它们用作脚本中的变量(在本例中hostname,但实际上我需要其他东西)。

当我将值分配给变量时,我总是获得本地值而不是远程值。可能是什么问题?请指教。

答案1

命令替换

`hostname`

在命令传递到远程服务器之前,正在(未引用的)此处文档中进行评估。要让它在远程服务器上求值,您需要以与转义变量替换相同的方式转义它\${A}

ssh ip@host /bin/bash << EOF
hostname
A=\`hostname\`
echo \${A}
EOF

或者(更好的是,替换已弃用的反引号形式的命令替换)

ssh ip@host /bin/bash << EOF
hostname
A=\$(hostname)
echo \${A}
EOF

或(最好 - 因为你似乎不想任何本地扩展),引用heredoc本身:

ssh ip@host /bin/bash << 'EOF'
hostname
A=$(hostname)
echo ${A}
EOF

答案2

你正在寻找这个。

hn=$(ssh 用户名@域 "主机名");echo "主机名是: $hn"

主机名是:[远程名称]

您想要在引号中运行的命令在远程服务器上运行该命令。您只需在本地系统上运行命令即可。你必须告诉 ssh 这就是你想要做的。

否则,对于更复杂的命令,请参阅: https://stackoverflow.com/questions/305035/how-to-use-ssh-to-run-a-local-shell-script-on-a-remote-machine

如果机器A是基于Unix的系统,您可以使用:

ssh root@MachineB 'bash -s' < local_script.sh

一般来说,我发现尝试将内容塞到命令行中并不是一个好主意,通常您希望运行包含逻辑并让您更轻松地控制输出的本地脚本。

注意 bash 的 -s。

另请注意该响应中的注释(我不会在此重复)、进一步的限定符、该命令是否需要 root/sudo 等。

在这里提问时,您提供的问题相关细节越多,人们就越不需要猜测您真正想要实现的目标。请记住,除非您用言语清楚地告诉他们,否则没有人知道您想做什么。

相关内容