【发布时间】:2017-04-28 11:21:44
【问题描述】:
我想为我的 Python 应用程序创建一个桌面启动器。该应用程序使用 publickey-authentication 在pexpect 上执行各种 ssh 操作。但是,问题是,当我使用 .desktop 启动器启动我的应用程序时,它无法正常工作。 ssh 连接要求输入密码并且不使用公钥。但它可以通过命令行执行正常工作。
.desktop 文件如下所示:
[Desktop Entry]
Version=1.0
Name=SSH-Manager
Comment=XYZ
Exec=python /home/userx/SSH-Manager/startup.py
Icon=/home/userx/SSH-Manager/resources/icon.png
Path=/home/userx/repos/SSH-Manager
Terminal=true
Type=Application
Categories=Utility;Application;
StartupNotify=false
桌面环境为KDE,桌面用户与命令行用户相同。
有人可以解释为什么我的启动器会出现这种奇怪的行为吗?
编辑:示例函数
def run(self):
self.a_signal.emit("Retrieving Data")
try:
session = pxssh()
session.force_password = False
hostname = self.client
username = "root"
session.login(hostname, username)
session.sendline("ls -a")
session.prompt()
session.logout()
except ExceptionPxssh as e:
print ("pxssh failed: ")
self.error_signal.emit("failed", str(e))
print e
return
self.process_output()
self.finish_signal.emit("done")
【问题讨论】:
-
桌面条目看起来不错。问题要么出在 Python 程序中(没有代码就无法分辨),要么出在与终端环境不同的桌面环境中。根据您启动 X 的方式,一些关键的环境变量可能会丢失。如果您使用 ssh-agent,但从终端启动它,您也会丢失环境变量。 ssh-agent 应该在 X 之前启动,以便所有进程共享一个代理。
-
我认为 ssh-agent 是问题所在。有没有办法绕过这个?也许用 bash 脚本或类似的东西启动 python 应用程序?
-
您可以在 X 之前启动 ssh-agent。在 Debian 中,您需要有可用的
/usr/bin/ssh-agent二进制文件(由我的系统上的openssh-client提供,但我认为有多个提供程序)和 @987654328 @ 安装包。然后将行use-ssh-agent添加到/etc/X11/Xsession.options文件并重新启动X。这将产生在所有桌面进程之间共享的ssh-agent。您需要使用ssh-add path/to/key手动添加您的密钥;检查它是否添加了ssh-add -L。您还可以通过在您的~/.ssh/config中添加行AddKeysToAgent=yes来在第一次请求时自动将密钥添加到代理。 -
我尝试了你解释的一切,但我无法让它以某种方式工作。我什至尝试了没有密码的密钥对,但是一旦我使用启动器启动我的应用程序,ssh 操作就需要密码。我将在我的问题中添加一些 python 代码。也许您知道问题可能出在 python 代码中。
-
从
~/.profile运行ssh-add似乎是错误的,但如果这对你有用,请考虑answering your own question 和marking it as accepted,所以这个问题不会再出现在未解决的查询列表中。
标签: python linux kde-plasma desktop-shortcut