Python - 使用远程主机的环境变量与/SSH

8
任何有关此问题的帮助都将不胜感激。
基本上,我正在编写一个Python脚本,用于通过SSH登录各种服务器并执行脚本。问题在于这些脚本使用环境变量进行启动。例如,脚本是test.sh,但我们使用环境变量来启动它,运行test.sh。
到目前为止,我采取的方法,例如Paramiko模块执行命令,但实际上没有采用环境变量。
import paramiko
ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('testserver' )

stdin, stdout, stderr = ssh.exec_command(cd /home/test/;$run ./test.sh')
print stdout.readlines()
print stderr.readlines()
ssh.close()

有没有使用paramiko的方法?或者我应该采取其他方法?

谢谢

@ Rob

我修改了脚本进行测试。$run变量返回为空。

stdin, stdout, stderr = ssh.exec_command('whoami;echo hello; echo $run ; echo goodbye')

['testuser\n', 'hello\n', '\n', 'goodbye\n']
[]

@ Rob 第二部分

登录服务器后,我可以使用echo $run命令并返回正确的路径/脚本。 同时我也检查了一下,这是在.profile文件中设置的环境变量。 我感觉Python没有调用.profile文件。


假设您修复了语法错误,当您运行上述程序时会发生什么? - Robᵩ
脚本名为test.sh,但我们使用环境变量来启动它,请运行test.sh。我无法理解这是什么意思。如何使用环境变量来启动脚本? - Jim Garrison
假设远程 shell 的 .profile 或类似的启动设置了 $run 环境变量,那么这应该完美地工作。您可以通过 ssh.exec_command('echo hello ; echo $run ; echo goodbye') 进行测试。 - Robᵩ
@JimGarrison - 线索就在代码中。他的意思是 $run test.sh - Robᵩ
那么您在远程机器上没有设置“run”环境变量。您是如何尝试设置“run”的? - Robᵩ
2个回答

5

ssh.exec_command不会解释远程的.profile文件。尝试这样做:

ssh.exec_command('. .profile ; cd /home/test/;$run ./test.sh')

哦,那是一个 ./.profile 文件吗?对于 $run 它仍然返回空白。尽管没有抛出任何错误。 - Josh
1
第一条命令是 ". .profile" 或 ". ./profile",而不是 "./.profile"。 - Robᵩ
太棒了,它在 . ./.profile 中运行成功。感谢您的帮助! - Josh

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接