【问题标题】:Run nohup and eval from python从 python 运行 nohup 和 eval
【发布时间】: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 启动了,但不知何故我无法连接

【问题讨论】:

    标签: python bash eval ssh-keys nohup


    【解决方案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.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2017-11-25
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多