下面是简单的脚本,用于列出ssh-agent中的键:
list_keys.sh
#!/bin/bash
ssh-add -llist_keys.py
if __name__ == '__main__':
"""
Creates log
"""
...
print("Start")
print subprocess.check_output(["/root/list_keys.sh"])当直接从终端呼叫时,它工作得很好。
$python list_keys.py日志按预期显示:
Start
2048 SHA256:+gkk***************************nQ .ssh/my_key (RSA)但当我试图让它成为服务,它失败了。
Start
Traceback (most recent call last):
File "/root/list_keys.py", line 43, in <module>
print subprocess.check_output(["/root/list_keys.sh"])
File "/usr/lib64/python2.7/subprocess.py", line 575, in check_output
raise CalledProcessError(retcode, cmd, output=output)
subprocess
.
CalledProcessError
:
Command '['/root/list_keys.sh']' returned non-zero exit status 2服务配置:
list_keys.service
[Unit]
Description=List Keys Service
After=multi-user.target
Conflicts=getty@tty1.service
[Service]
Type=simple
ExecStart=/usr/bin/python /root/list_keys.py
StandardInput=tty-force
[Install]
WantedBy=multi-user.target我正在开发Centos 7,知道如何将list_keys.py作为服务吗?
发布于 2020-01-10 01:45:09
结果发现问题不在子过程中。当脚本从服务调用时,它有一个不同于终端的会话。这就是为什么"ssh-add -l“由于没有在该会话中建立ssh代理而失败的原因。在"list_keys.sh“中添加脚本来建立ssh代理解决了我的问题。
在how to establish ssh-agent上参考。
python子进程与其无关。
发布于 2020-01-09 10:47:29
您很可能忘记了shell文件中的执行位,很容易通过以下方法修复:
chmod +x list_keys.sh下一个候选人将是通往ssh-add的完整路径
/usr/bin/ssh-addhttps://stackoverflow.com/questions/59662169
复制相似问题