无法通过SSH运行命令

内存

我在FreeBSD机器(xxx.yyy.zzz.net)上运行命令并获取输出

命令

sudo camcontrol devlist | grep -o 'ada[0-9]' | while read -r a ; do sudo camcontrol identify $a | grep rotating ; done

输出

media RPM             non-rotating
media RPM             non-rotating
media RPM             non-rotating

我正在尝试使用另一台计算机上的ssh运行相同的命令

命令

ssh xxx.yyy.zzz.net sudo camcontrol devlist | grep -o 'ada[0-9]' | while read -r a ; do sudo camcontrol identify $a | grep rotating ; done

错误

sudo: camcontrol: command not found
卡米尔·马乔洛夫斯基(Kamil Maciorowski)

在您的命令中,每一个|都由本地外壳程序解释。最后一个参数sshdevlistssh被本地调用(这并不奇怪),但是first之后的所有内容也是如此|

您收到的错误来自sudo以下代码段:do sudo camcontrol identify $a它在本地运行,显然camcontrol在本地计算机上不可用。

您需要适当的转义或引用。在这种情况下,您可能希望将整个远程命令包含在单引号中:

ssh xxx.yyy.zzz.net 'sudo camcontrol devlist | grep -o "ada[0-9]" | while read -r a ; do sudo camcontrol identify $a | grep rotating ; done'

注意,我更改了您已有的单引号。(添加的)单引号不仅将整个字符串ssh归为一团,而且得到了整个字符串它们还阻止了细菌的局部扩展$a

如果sudo要询问您的密码,它将需要一个伪终端。您可以使用-toption强制伪终端分配ssh(因此看起来像ssh -t xxx.yyy.zzz.net …)。注意ssh -t在远程侧分配伪终端。远程sudo提示其stderr,但随后通过该伪终端“打印” stdout和stderr(就像它们通常打印到控制台一样),此时,您不能再将它们分开。合并的流将被捕获并传输到本地端,并进入stdout。如果没有-t分别传输远程stdout和stderr,请转到本地端的stdout和stderr,它们最终会合并(如果重定向,也不会合并)到您看到的内容中。这意味着-t您(在本地)无法将远程stderr与远程stdout区分开。如果您需要在本地进一步处理(重定向)输出并使用,-t则来自的任何提示sudo都会造成干扰。

另外,您可能想要双引号$a(即使在第一个不使用的命令中也是如此ssh)。请参阅为什么我的Shell脚本会在空白或其他特殊字符上造成窒息?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

gnuplot无法通过ssh命令运行

来自分类Dev

通过SSH命令运行nano

来自分类Dev

SSH:通过SSH执行时,无法在终端中运行的javac命令起作用

来自分类Dev

无法通过SSH运行cryptsetup?

来自分类Dev

运行通过ssh嵌套引号的shell命令

来自分类Dev

通过SSH在后台运行远程命令

来自分类Dev

通过单个命令在SSH上运行htop

来自分类Dev

如何通过SSH运行subshell命令?

来自分类Dev

运行通过ssh嵌套引号的shell命令

来自分类Dev

如何获得$?从通过ssh运行的命令

来自分类Dev

如何通过SSH正确运行“ top”命令?

来自分类Dev

通过SSH运行bash命令时出错

来自分类Dev

通过 ssh 运行星号命令的问题

来自分类Dev

Ansible临时命令有效,但运行剧本无法通过ssh进行身份验证

来自分类Dev

通过SSH连接时无法推送git更新并运行Unix命令

来自分类Dev

多个SSH无法运行多个命令

来自分类Dev

无法通过Paramiko SSH发送AT命令

来自分类Dev

无法通过ssh执行mpiexec命令

来自分类Dev

sed命令无法通过SSH使用

来自分类Dev

无法通过SSH使用PowerShell命令

来自分类Dev

无法通过dockerfile在docker上运行ssh

来自分类Dev

无法通过 Runtime.exec 运行命令

来自分类Dev

无法通过命令提示符运行powershell命令

来自分类Dev

Python子进程-通过SSH运行多个Shell命令

来自分类Dev

通过SSH运行nohup命令,然后断开连接

来自分类Dev

通过Shell脚本从ssh命令运行节点文件

来自分类Dev

通过ssh在远程计算机上运行docker命令

来自分类Dev

通过SSH运行nohup命令,然后断开连接

来自分类Dev

在许多服务器上通过SSH自动运行命令