Я не уверен, что происходит, и поэтому я тоже спрашиваю здесь в надежде, что некоторые из вас могут.
Я пытаюсь понять, почему тот же однострочный файл успешно подключается к моему удаленному серверу.
ansible-playbook initial.yml -u root -e 'host_key_checking=False'
но если я запустил ту же однострочную оболочку из сценария оболочки, то получу:
fatal: [*********]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: root@*************: Permission denied (publickey).\r\n", "unreachable": true}
Я пробовал с sudo и без. Сценарий оболочки находится в том же каталоге.
Есть предположения?
Когда ты бежишь ansible-playbook
во время входа в систему ansible может использовать соединение с вашим агентом ключей ssh, чтобы использовать ключи ssh для входа в систему без ввода пароля или ключевой фразы.
Вы не указываете, как вы запускаете сценарий, содержащий команду, но чаще всего смысл помещать его в сценарий состоит в том, чтобы его можно было легко вызвать из cron
. Однако среда выполнения из cron
не имеет соединения с агентом ключа ssh, и, следовательно, вход на удаленный хост не выполняется.
Одним из способов решения этой проблемы является использование ключа авторизации без парольной фразы, но вы должны осознавать последствия для безопасности! Любой, кто прикоснется к этому закрытому ключу, может войти в систему везде, где установлен открытый ключ. Один из способов смягчить это - использовать принудительную команду с открытым ключом, но это уже другая тема.