我打算将 python 脚本作为服务运行。
[Unit]
Description=Description
Wants=network-online.target
After=multi-user.target network.target network-online.target
[Service]
Type=simple
Restart=always
ExecStart=/path/to/python /path/to/script.py
[Install]
WantedBy=multi-user.target
该脚本连接到远程计算机。当我/path/to/python /path/to/script.py
在 shell 中运行脚本时,它工作正常。没有错误。但是当服务运行时,我没有看到预期的结果。
在检查状态时,我看到以下重复内容:
Jul 2 00:00:41 user systemd[1]: Description
Jul 2 00:00:42 user python[12121212]: Pseudo-terminal will not be allocated because stdin is not a terminal.
Jul 2 00:00:42 user python[12121212]: Host key verification failed.
答案1
SSH 连接(通常)基于“首次使用时信任”的概念,这就是为什么您在首次连接时会(以交互方式)收到提示,询问您是否信任远程主机(密钥)的指纹。
这显然不适用于非交互式服务。尝试sudo
以用户身份运行服务(root,从您的服务文件?)并连接到远程服务器。一旦您信任该密钥,该密钥就会被保存~/.ssh/known_hosts
并且您的服务应该运行。
(如果您的服务使用paramiko
,它希望调用load_system_host_keys()
来加载此文件。)