def allocatePty(self): fd = 0 term = os.environ['TERM'] winsz = fcntl.ioctl(fd, tty.TIOCGWINSZ, '12345678') winSize = struct.unpack('4H', winsz) ptyReqData = session.packRequest_pty_req(term, winSize, '') self.conn.sendRequest(self, 'pty-req', ptyReqData) signal.signal(signal.SIGWINCH, self._windowResized)
def channelOpen(self, ignored): """ Create a pty by sending a pty-req to the server """ term = 'xterm' winSize = (25, 80, 0, 0) ptyReqData = session.packRequest_pty_req(term, winSize, '') self.conn.sendRequest(self, 'pty-req', ptyReqData) command = self.conn.sendRequest(self, 'exec', NS(self._command), wantReply=True) command.addCallbacks(self._execSuccess, self._execFailure)
def channelOpen(self, data): self.conn.set_channel(self) data = session.packRequest_pty_req( 'xterm-color', (self.conn.terminal_size[1], self.conn.terminal_size[0], 0, 0), '') deferred = self.conn.sendRequest(self, 'pty-req', data, wantReply=1) @deferred def on_success(ignored): if self.conn.command: self.conn.sendRequest(self, 'exec', common.NS(str(self.conn.command)), wantReply=1) else: self.conn.sendRequest(self, 'shell', '', wantReply=1)
def channelOpen(self, _): def ptyReqFailed(reason): # TODO(vladum): Why is this never called? Looks like the Transport # received the error (at least the packet integrity ones). err("SSH PTY Request failed") self.reason = reason self.conn.sendClose(self) modes = pack("<B", 0x00) # only TTY_OP_END win_size = (0, 0, 0, 0) # 0s are ignored pty_req_data = packRequest_pty_req('vt100', win_size, modes) d = self.conn.sendRequest(self, 'pty-req', pty_req_data, wantReply=True) #Set all the env variables we've got for key, value in self.env: d.addCallback( lambda _: self.conn.sendRequest(self, 'env', NS(key), NS(value), wantReply=True) ) d.addCallback( # send command after we get the pty lambda _: self.conn.sendRequest(self, 'exec', NS(self.command)) ) d.addErrback(ptyReqFailed)