通过 ssh 远程调用时 readlink 不起作用

通过 ssh 远程调用时 readlink 不起作用

我正在使用 molecular 和 testinfra 测试一些 ansible 角色。在调试模式下运行测试后,我可以看到它尝试调用以readlink -f '/sbin/init'检查 systemd 是否已符号链接。下面是远程命令:

ssh -o UserKnownHostsFile=/dev/null -o ControlMaster=auto -o ControlPersist=60s -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o User=myuser -o Port=22 -i /Users/myuser/.cache/molecule/jenkins-config/default/ssh_key -o ConnectTimeout=10 99.999.9.999 \'sudo /bin/sh -c \'"\'"\'readlink -f /sbin/init\'"\'"\'\''

从 ansible 主机以高详细程度运行此命令会显示当前测试失败的原因。

bash: sudo /bin/sh -c 'readlink -f /sbin/init': No such file or directory

但是,当在 ansible 目标上本地运行此命令时。

$ sudo /bin/sh -c 'readlink -f /sbin/init'
/usr/lib/systemd/systemd

显示正确的输出。

我不太确定为什么这在远程会话中失败,并且我不知道如何获取更多信息来帮助解决此问题。

答案1

您的通话似乎使用了过于复杂的报价。这条线的工作原理:

ssh <your-options> <target-host> "sudo /bin/sh -c 'readlink -f /sbin/init'"

(请注意,如果需要密码,使用-Ssudo 选项将使密码输入可见。)

答案2

您不需要在远程系统上使用sudobash运行该命令。

只是

ssh <options> <user@hostname> readlink -f /sbin/init

应该足够了。

相关内容