如何使用paramiko.ServerInterface来响应exec请求

时间:2016-12-09 07:24:28

标签: python ssh paramiko

例如,Ubuntu上的OpenSSH服务器可以响应ssh [username@]hostname [command],执行此单个[命令]和响应。

例如,

me@ubuntu:~$ ssh 127.0.0.1 ls
Desktop Documents Downloads Music Pictures Public Videos
me@ubuntu:~$

问题是:

  • 如何使用paramiko.ServerInstance实现此类服务器?
  • 如何控制本地shell的stdin和stdout的输入和输出?

还有一个问题是,如果后台命令处理程序不是标准shell,而是sshim之类的实现怎么办?

1 个答案:

答案 0 :(得分:0)

paramiko.ServerInstance实际上提供了一个实现钩子,使用此check_channel_exec_request,您可以在本地调用命令并使用 channel 发送,recv或关闭。

check_channel_exec_request 频道命令

Determine if a shell command will be executed for the client. 
If this method returns True, the channel should be connected 
to the stdin, stdout, and stderr of the shell command.

The default implementation always returns `False`.

<强>参数:

  • 频道(Channel) - 频道请求已到达。
  • command(str) - 要执行的命令。

退货:

  • True如果此通道现在连接到执行命令的stdin,stdout和stderr
  • False如果命令不会被执行。