从 python 运行 nohup 和 eval
Posted
技术标签:
【中文标题】从 python 运行 nohup 和 eval【英文标题】:Run nohup and eval from python 【发布时间】:2016-01-19 11:49:52 【问题描述】:我需要运行两个命令(从 shell 看起来像)
$ eval `ssh-agent -s`
Agent pid 8631
$ ssh-add ~/.ssh/user
注意:密钥在/home/user/.ssh/user 中且正确
运行就像 bash 脚本一样工作:
#!/bin/bash
nohup `eval `ssh-agent -s`` >/dev/null 2>&1 &
ssh-add ~/.ssh/$user
但我无法从 python 开始工作,ssh-agent 已启动,但 ssh-add 返回:无法打开与您的身份验证代理。
import os
os.system('nohup \'eval `ssh-agent -s`\' &')
os.system('ssh-add /home/user/.ssh/user')
我试过了:
import os
system('nohup sh -c \'eval `ssh-agent -s`\' &')
同样的问题 ssh-agent 启动了,但不知何故我无法连接
【问题讨论】:
【参考方案1】:os.system
的作用是为每个命令启动不同的 shell。而eval `ssh-agent -s`
所做的是启动一个新的ssh-agent
并在当前shell 中存储一些与它通信所需的环境变量。最后,ssh-add
使用该变量来访问 ssh-agent
代理以向其添加新密钥。
所以你需要在同一个 shell 上执行这两个命令。您可以通过对os.system
的唯一调用来依次调用这两个命令来做到这一点:
os.system("eval `ssh-agent -s`; ssh-add /home/user/.ssh/user")
【讨论】:
似乎工作,我得到: ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory 因为我的私钥受密码保护。但是当我添加 pexpect 来获取输出并传递密码时,我得到了:pexpect.ExceptionPexpect: The command was not found or is not executable: eval.以上是关于从 python 运行 nohup 和 eval的主要内容,如果未能解决你的问题,请参考以下文章