如何在Python中从远程系统检索环境变量?

时间:2013-04-24 16:08:59

标签: python ssh environment-variables

我正在尝试用Python检索远程Linux服务器的环境变量。或者,如果我可以在我正在执行的命令中使用变量名,那也很好。据我所知,我正在制作的电话应该可以工作,但我正在回收垃圾。我已经设置了公钥验证,因此不需要密码。

努力1:

devdir = subprocess.check_output(["ssh", connectstring, "echo $DEVDIR"])

努力2:

ret = subprocess.check_output(["ssh", connectstring, 
    "$DEVDIR/{0}".format(testpath)])

connectstring是用户@ ip,工作正常。 $DEVDIR是我想要使用的远程变量并包含路径。 testpath是我尝试执行的脚本的路径,以$DEVDIR为根。

Effort 1返回“\ n”,Effort 2无法远程解析$ DEVDIR。


努力3:

import paramiko
...
ssh = paramiko.SSHClient()
ssh.connect(ip, user)    # succeeds
stdin, stdout, stderr = ssh.exec_command("echo $DEVDIR")

结果:stdout.readlines()=“\ n”

3 个答案:

答案 0 :(得分:2)

如果在.bashrc中设置了环境变量,则可以强制远程命令在具有-l选项的登录shell下运行。以下......

devdir = subprocess.check_output(["ssh", connectstring, "sh -l -c 'echo $DEVDIR'"])

......对我有用。

答案 1 :(得分:1)

执行命令va SSH不会产生登录会话。所以可能没有设置一些变量。

您可以通过将变量替换为$HOSTNAME$HOST$SSH_CONNECTION等其他变量或执行env命令来检查此项。

解决方案可能是将变量赋值放入一个在非登录会话中执行的文件中。但是,.bashrc应该没问题;也许里面有一处瑕疵。

答案 2 :(得分:-1)

试试这个:

devdir = subprocess.check_output(["ssh -i", connectstring, "echo $DEVDIR", FALSE])

这有点像黑客,但它应该有所帮助。