您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

 /bin/sesu test

如果您不知道完整路径,则在常见的* nix系统上,可以which sesu在交互式SSH会话中使用command。

修复您的启动脚本,以便PATH为交互式和非交互式会话设置相同的脚本。

尝试通过登录外壳显式运行脚本(使用--login带有通用* nix外壳的开关):

 bash --login -c "sesu test"

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

 PATH="$PATH;/path/to/sesu" && sesu test

另一种(不推荐)的方法是使用get_pty参数强制为“ exec”通道分配伪终端:

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

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

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

python 2022/1/1 18:30:43 有479人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶