我通过终端(在Mac上)连接到SSH并运行Paramiko Python脚本,出于某种原因,会话似乎表现不同。
$this->cell()
环境变量在两种情况下都不同
这是我运行的代码:
PATH
知道环境变量为何不同?
我该如何解决?
答案 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