我正在使用 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'"
(请注意,如果需要密码,使用-S
sudo 选项将使密码输入可见。)
答案2
您不需要在远程系统上使用sudo
或bash
运行该命令。
只是
ssh <options> <user@hostname> readlink -f /sbin/init
应该足够了。