使用Paramiko时的环境变量差异

时间:2015-08-12 11:37:10

标签: python ssh environment-variables paramiko

我通过终端(在Mac上)连接到SSH并运行Paramiko Python脚本,出于某种原因,会话似乎表现不同。

$this->cell()环境变量在两种情况下都不同

这是我运行的代码:

PATH

知道环境变量为何不同?

我该如何解决?

2 个答案:

答案 0 :(得分:4)

默认情况下,SSHClient.exec_command不会为会话分配伪终端。因此,可能(可能)获取了一组不同的启动脚本(特别是对于非交互式会话,.bash_profile未获取)。根据{{​​1}}环境变量的缺失/存在,和/或脚本中的不同分支。

要使用TERM模拟默认的Paramiko行为,请使用ssh开关:

-T

请参阅ssh man

  

ssh -T myuser@host 禁用伪tty分配。

相反,要模仿Paramiko的默认-T行为,请将ssh的{​​{1}}参数设置为get_pty

exec_command

虽然不是通过在Paramiko中分配伪终端来解决问题,但您应该更好地修复启动脚本,为所有会话设置相同的True

为此,请参阅Some Unix commands fail with "<command> not found", when executed using Python Paramiko exec_command

答案 1 :(得分:2)

使用Channel对象而不是SSHClient对象解决了我的问题。

chan=ssh.invoke_shell()
chan.send('echo $PATH\n')
print (chan.recv(1024))

有关详细信息,请参阅documentation