Subject: Error opening SCP channel

Error opening SCP channel

From: dfg dfg <>
Date: Sat, 4 Sep 2010 00:32:25 +0000

Hi all,


I am currently writing a program that will use libssh2 on Ubuntu 10.04. To make sure I have SSH working, I installed openssh-server and tested it by connecting to it. I also successfully SCP'd a file to the server using the "scp" command.


I then did a small test by using libssh2 to connect to the ssh server, open a ssh channel and run a command such as "uptime". This all worked perfectly.


However, I ran into a problem when trying to send a file using SCP. I have followed the example code here:


The code was copied and pasted from that example. I was successful in connecting to the SSH server and logging in. But, I seem to get an error when opening the SCP channel.


The code to do so is the following:

    /* Send a file via scp. The mode parameter must only have permissions! */
    channel = libssh2_scp_send(session, scppath, fileinfo.st_mode & 0777, (unsigned long)fileinfo.st_size);
    if (!channel) {
        char *errmsg;
        int errlen;
        int err = libssh2_session_last_error(session, &errmsg, &errlen, 0);

        fprintf(stderr, "Unable to open a session: (%d) %s\n", err, errmsg);
        goto shutdown;

This returns an error: Unable to open a session: (0)

I am not sure what is meant by the error code 0. I also thought it was a bit weird that there was no error message set into err msg.


If I do comment out the lines that checks whether the channel has been set, I get another error from this block of code:

do {
        nread = fread(mem, 1, sizeof(mem), local);
        if (nread <= 0) {
            /* end of file */
        ptr = mem;
        do {
            /* write the same data over and over, until error or completion */
            rc = libssh2_channel_write(channel, ptr, nread);

            if (rc < 0) {
                fprintf(stderr, "ERROR %d\n", rc);
            else {
                /* rc indicates how many bytes were written this time */
                ptr += rc;
                nread -= rc;
        } while (nread);
  } while (1);


I get the error: ERROR -39


Can anyone please assist me and tell me what I have done wrong?


Thank you very much :)

Received on 2010-09-04