python - 从 python 运行 nohup 和 eval

标签 python bash eval ssh-keys nohup

我需要运行两个命令(从 shell 看起来像)

$ eval `ssh-agent -s`
Agent pid 8631
$ ssh-add ~/.ssh/user

注意: key 位于/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 启动了,但不知何故我无法连接

最佳答案

os.system 是如何为每个命令启动不同的 shell 的。 eval `ssh-agent -s` 的作用是启动一个新的 ssh-agent 并在当前 shell 中存储一些与其通信所需的环境变量。最后,ssh-add 使用该变量访问 ssh-agent 代理以向其添加新 key 。

因此您需要在同一个 shell 上执行这两个命令。您可以通过对 os.system 的唯一调用来依次调用这两个命令来完成此操作:

os.system("eval `ssh-agent -s`; ssh-add /home/user/.ssh/user")

关于python - 从 python 运行 nohup 和 eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33243095/

相关文章:

javascript - 从 Textarea 执行 Javascript - JSHint eval 是邪恶的

python - 使用 eval 设置未知属性

python - 给数组切片赋值很慢

python - pyside 代码行 'combo.activated[str].connect(self.onActivated)' 中括号的含义是什么?

linux - 你如何杀死所有超过某个年龄的 Linux 进程?

php - 我正在将文本从 bash 脚本传递到 php。除 mount 和 unmount bash 命令外,一切正常。我究竟做错了什么?

python - 安装 Kivy 时出现多个错误

python - Web Scraper 未填充 .csv 文件

regex - Sed 替换 URL 中的域

python - 使用 eval 启动进程