通过套接字连接模拟shell - Python

时间:2016-10-13 21:21:33

标签: python linux shell sockets

不,这不是家庭作业的一部分

我正在开发一个项目,我需要模拟在远程docker容器中执行的shell命令。我能够获得与容器的连接,该连接是OpenSSL连接和socket。 当我执行command="ls"之类的命令时,我能够用read()读取输出:

def read(self, socket, n=4096):
    """
    Return `n` bytes of data from the Stream, or None at the end of the stream

    :param n:
    :return:
    """
    while True:
        try:
            if hasattr(socket, 'recv'):
                return socket.recv(n)
            return os.read(socket.fileno(), n)
        except Exception, e:
            print e

所以例如:

container = self.client.create_container()
exec_id = self.client.exec_create(container, command, tty=True)
socket = self.client.exec_start(exec_id=exec_id, tty=True, stream=True)
response = self.read(socket)

我可以得到以下输出:

bin       openssl
etc       share
include
lib       
license-eula.txt  var

然而,在执行诸如/bin/bash之类的命令时,事情变得更有趣。因此,在这种情况下,我应该保持与连接的交互,从stdin获取输入,从套接字写入和读取...我确实有办法调整终端的大小,所以这不是我最关心的问题。我的问题是:如何通过套接字连接模拟终端?我知道dockerpty,但由于tls连接(Here's the ticket I created),它无法在我的设置中使用。

0 个答案:

没有答案