有人知道如何注册环境变量吗 使用SSHClient时执行命令调用?
我使用的是一个基本脚本,它实例化SSHClient类,使用connect方法连接到另一台计算机,然后使用exec_命令方法发送命令。但是,当我试图发出命令时,似乎没有注册任何环境变量。我可以做一些基本的事情,比如'ls'并查看stdout,但是当尝试运行已安装的程序时,环境变量丢失的事实使运行它们变得不可能。在命令行中使用ssh执行相同的操作,因为为用户设置了环境变量。
#!/usr/bin/python
import paramiko
ssh.connect('mymachine',username='myname',password='pass')
stdin,stdout,stderr=ssh.exec_command('cd /myfolder/path')
stdin,stdout,stderr=ssh.exec_command('ls')
....
....
ssh.close()
注意:我不能在paramiko中更改我的目录。我在后续命令中将cd
命令附加到单个ssh.exec_command('cd /dddd/ddd;ls')
中。我已经给出了ls
作为示例,但实际的后续命令不同。
从2.1.0版2016-12-09开始,您可以将环境变量字典添加到exec_命令中:
输出:
但我为什么选择LC_电话和LC_测量?因为这是目标主机的ssh配置允许我设置的少数几个环境中的两个:
输出:
换句话说,这不起作用:
输出:
正如文档中警告的那样,环境变量将被静默拒绝 http://docs.paramiko.org/en/2.1/api/client.htmlhttp://docs.paramiko.org/en/2.1/api/channel.html#paramiko.channel.Channel.set_environment_variable
如果无法控制目标服务器的sshd配置,则将环境变量放入一个文件并对其进行源化即可:
输出:
对我来说一切都很好。如果您有特殊的环境变量,您可以 必须在远程命令提示符下设置它们。如果你写下 变量放入myENV文件,然后调用
stdin,stdout,stderr = client.exec_command('source ./myEnv')
你试过那样的东西吗?
你可以做:
client.exec_command(..., get_pty=True)
。这将使paramiko分配一个伪终端,类似于
ssh
。相关问题 更多 >
编程相关推荐