SSH経由でリモートで呼び出すとreadlinkが機能しない

SSH経由でリモートで呼び出すとreadlinkが機能しない

私は分子と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

リモートシステムでは、このコマンドを使用またはsudo実行する必要はありません。bash

ただ

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

それだけで十分です。

関連情報