1
echo Something=Something > file

我可以使用 paramiko 的 exec_command 来执行cat, grepand ls,但是每当我尝试修改文件时它什么都不做。在这之前我已经跑su了。该文件与运行该命令之前的文件完全相同。

4

1 回答 1

2

这是因为您必须为每个 exec_command 调用打开一个新通道。这会丢失 su 命令的身份验证,因为它与特定通道相关联。

你有几个选择。

  1. 使用 sudo 运行命令,这可能无法通过 paramiko
  2. 以 root 身份登录,这不一定是个好主意
  3. 在您的频道上使用 invoke_shell(),然后通过 std in 将命令发送到 shell

选项 3 允许将 ssh 与 paramiko 交互使用,保持状态信息完整。这就是 su 命令所需要的。它还允许你围绕你的 shell 连接创建一个 pexpect 类型的包装器,观察标准输出管道以了解事情已经完成的迹象,你可以通过标准输入发送额外的命令。在您读取数据之前,请注意管道填充和阻塞。

于 2011-06-07T17:56:47.570 回答