저는 분자 및 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
그 정도면 충분합니다.