<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span id="yui_3_16_0_1_1429011346119_3144">Hi everybody,</span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span id="yui_3_16_0_1_1429011346119_3157">I am student and need help of any one.</span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span id="yui_3_16_0_1_1429011346119_3065">I am working on internship and I have to implement a SFTP client usign twisted conch module.</span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span id="yui_3_16_0_1_1429011346119_3066">I have program thoe code to establish th ssh tunnel using password authentication. I arrive to create directory with "MakeDirectory" method of FileTransfertClient class.</span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span id="yui_3_16_0_1_1429011346119_3109">But my objective is to upload and download files and the FileTransfertClient  class has no method [or as I konw ] to do that.</span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span><br></span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span id="yui_3_16_0_1_1429011346119_3158">Can you help me with way to do the uploading and the downloding with twisted conch?</span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span><br></span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span id="yui_3_16_0_1_1429011346119_3180">Here is my program.</span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span><code></span></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">'''</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">Created on 8 avr. 2015</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">@author: hsanfo</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">'''</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from sys import stdout</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.python.log import startLogging, err</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.internet import reactor</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.internet.defer import Deferred</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.conch.ssh.common import NS</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">import twisted.conch.scripts.cftp.ClientOptions</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.conch.scripts.cftp import ClientOptions</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.conch.ssh.filetransfer import FileTransferClient</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.conch.client.connect import connect</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.conch.client.default import SSHUserAuthClient, verifyHostKey</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.conch.ssh.connection import SSHConnection</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.conch.ssh.channel import SSHChannel</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.conch.ssh import keys, userauth</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">from twisted.internet import defer</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">class SFTPSession(SSHChannel):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    name = 'session'</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    def channelOpen(self, whatever):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        d = self.conn.sendRequest(</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">            self, 'subsystem', NS('sftp'), wantReply=True)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        d.addCallbacks(self._cbSFTP)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    def _cbSFTP(self, result):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        client = FileTransferClient()</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        client.makeConnection(self)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        self.dataReceived = client.dataReceived</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        self.conn._sftp.callback(client)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">class SFTPConnection(SSHConnection):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    </div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    def serviceStarted(self):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        self.openChannel(SFTPSession())</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">class ClientUserAuth(userauth.SSHUserAuthClient):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    def getPassword(self, prompt = None):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        #normal password authentication</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        print "PASSWORD AUTH"</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        return defer.succeed('test') # <-- YOUR PASSWORD</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    def getGenericAnswers(self, name, instruction, prompts):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        #interactive password authentication</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        print "INTERACTIVE AUTH"</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        response = ['']*len(prompts)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        for i, p in enumerate(prompts):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">            try:</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">                if('password' in p[0].lower()):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">                    response[i] = 'test' # <-- YOUR PASSWORD</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">            except:</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">                pass</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        #The response is always a sequence, and the length of it is always</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        #identical to the length of prompts</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        return defer.succeed(response)   </div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    </div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">def sftp(user, host, port):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    options = ClientOptions()</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    </div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    options['host'] = host</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    options['port'] = port</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    conn = SFTPConnection()</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    conn._sftp = Deferred()</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    auth = SSHUserAuthClient(user, options, conn)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    #auth = ClientUserAuth(user, options, conn)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    #connect(host, port, options, verifyHostKey, auth)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    connect(host, port, options, None, auth)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    </div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    return conn._sftp</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">def transfer(client):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    d = client.makeDirectory('foobarbaz', {})</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    def cbDir(ignored):</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">        print 'Made directory'</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    d.addCallback(cbDir)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    return d</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">def main():</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    startLogging(stdout)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    user = 'test'</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    host = '192.168.29.129'</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    port = 22</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    d = sftp(user, host, port)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    d.addCallback(transfer)</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    d.addErrback(err, "Problem with SFTP transfer")</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    d.addCallback(lambda ignored: reactor.stop())</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    reactor.run()</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">if __name__ == '__main__':</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"></div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr" class="" style="">    main()</div><div id="yui_3_16_0_1_1429011346119_2962" dir="ltr"><span><code></span></div><div></div><div id="yui_3_16_0_1_1429011346119_2986"> </div><div class="signature" id="yui_3_16_0_1_1429011346119_2964"><div id="yui_3_16_0_1_1429011346119_2985"><span style="font-weight:bold;background-color:rgb(255, 255, 255);color:rgb(68, 0, 98);" id="yui_3_16_0_1_1429011346119_3207">Best regards</span></div><div id="yui_3_16_0_1_1429011346119_2963"><span style="font-weight:bold;background-color:rgb(255, 255, 255);color:rgb(68, 0, 98);"><br></span></div><span style="font-weight:bold;background-color:rgb(255, 255, 255);color:rgb(68, 0, 98);" id="yui_3_16_0_1_1429011346119_3356">SANFO</span><div id="yui_3_16_0_1_1429011346119_3181"><br></div><div id="yui_3_16_0_1_1429011346119_3182"><br></div><div id="yui_3_16_0_1_1429011346119_3206"><span style="font-style:italic;color:rgb(112, 172, 237);">      <span style="font-size:x-small;"> </span></span></div></div></div></body></html>