使用 Paramiko 时的环境变量差异
- 2025-02-11 09:51:00
- admin 原创
- 106
问题描述:
我通过终端(在 Mac 上)连接到 SSH 并运行 Paramiko Python 脚本,出于某种原因,这两个会话似乎表现不同。PATH
在这些情况下,环境变量是不同的。
这是我运行的代码:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('host', username='myuser',password='mypass')
stdin, stdout, stderr =ssh.exec_command('echo $PATH')
print (stdout.readlines())
知道为什么环境变量不同吗?
我该如何修复它?
解决方案 1:
默认SSHClient.exec_command
情况下,不会为会话分配伪终端。因此,可能会获取一组不同的启动脚本(特别是对于非交互式会话,.bash_profile
则不会获取)。并且/或者根据环境变量的存在/不存在,在脚本中采用不同的分支TERM
。
要模拟默认的 Paramiko 行为ssh
,请使用-T
开关:
ssh -T myuser@host
参见该ssh
男子:
-T
禁用伪tty分配。
ssh
相反,为了模拟Paramiko 的默认行为,将get_pty
参数设置exec_command
为True
:
def exec_command(self, command, bufsize=-1, timeout=None, get_pty=False):
但是,您不应该通过在 Paramiko 中分配伪终端来解决这个问题,而应该修复启动脚本,PATH
为所有会话设置相同的设置。
为此,请参阅使用 Python Paramiko exec_command 执行时,某些 Unix 命令失败并显示“未找到 <command>”。
解决方案 2:
使用对象Channel
而不是SSHClient
对象解决了我的问题。
chan=ssh.invoke_shell()
chan.send('echo $PATH
')
print (chan.recv(1024))
有关详细信息,请参阅文档
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD