某些Unix命令以“ 找不到”,使用Python Paramiko exec_command执行时

某些Unix命令以“ 找不到”,使用Python Paramiko exec_command执行时,第1张

某些Unix命令以“ 找不到”,使用Python Paramiko exec_command执行时

SSHClient.exec_command
默认情况下,不会在“登录”模式下运行壳和用于会话不分配一个伪终端。结果
.bash_profile
,与常规的交互式SSH会话相比,(可能)获得了(可能)获得了不同的启动脚本集(尤其是对于非交互式会话,而不是源)。基于
TERM
环境变量的存在/不存在,在脚本中采用和/或采用不同的分支。

可能的解决方案(按优先顺序):

  1. 修复命令,使其不依赖于特定环境。
    sesu
    在命令中使用完整路径。例如:
     /bin/sesu test

如果您不知道完整路径,则在常见的* nix系统上,可以

which sesu
在交互式SSH会话中使用command。

  1. 修复您的启动脚本,以便

    PATH
    为交互式和非交互式会话设置相同的脚本。

  2. 尝试通过登录外壳显式运行脚本(使用

    --login
    带有通用* nix外壳的开关):

     bash --login -c "sesu test"
  3. 如果命令本身依赖于特定的环境设置,并且您无法修复启动脚本,则可以在命令本身中更改环境。语法取决于远程系统和/或外壳。在常见的* nix系统中,这可以工作:

     PATH="$PATH;/path/to/sesu" && sesu test
  4. 另一种(不推荐)的方法是使用

    get_pty
    参数强制为“ exec”通道分配伪终端:

     stdin,stdout,stderr=ssh.exec_command('sesu test', get_pty=True)

使用伪终端自动执行命令会给您带来讨厌的副作用。例如,请参见例如,有没有一种简单的方法来摆脱使用Python的Paramiko库进行SSH并从远程计算机的CLI提取输出时出现的垃圾值?


您可能在

LD_LIBRARY_PATH
共享对象和查找方面存在类似的问题。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5646128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存