我正在尝试用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”
答案 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])
这有点像黑客,但它应该有所帮助。