Buy commercial curl support from WolfSSL. We help you work out your issues, debug your libcurl applications, use the API, port to new platforms, add new features and more. With a team lead by the curl founder himself.

Re: libcurl configuration for sftp

From: Dan Fandrich via curl-library <curl-library_at_cool.haxx.se>
Date: Mon, 19 Oct 2020 09:39:57 -0700

On Mon, Oct 19, 2020 at 10:40:30AM -0500, Michael Loutris wrote:
> I grabbed the libssh2.dll and generated a .lib for Windows and was able to successfully transfer a file.
> I suspect that my issue has to do with properly formatting the strings to libcurl, and for Windows in particular.
>
> 1. I want to set the remote port for SFTP, so I believe that I should *NOT* user CURLOPT_CONNECT_TO, but use CURLOPT_RESOLVE, correct?

You don't need either of those options to set the report port. Just set it in
the URL, e.g. sftp://192.168.0.1:1234/file Or, alternately, use CURLOPT_PORT.

> 2. The SSH/SFTP connection lies on an internal network, with no DNS or domain names. In the CURLOPT_RESOLVE description, the curl_slist string has the format HOST:PORT:ADDRESS
> Should I leave the HOST empty or repeat the address?
> Which of the following formats do I use, ":22:10.20.30.40" or "10.20.30.40:22:10.20.30.40"?

You don't need any of them. Just use the IP address in the URL, e.g. sftp://10.20.30.40:22/file

> 3. When setting up the CURLOPT_URL, I need to connect to the server to a user account on the D: drive.
> I tried using the following call, but I'm afraid that it might be malformed. Again, this is for SFTP between two Windows 10 machines.
>
> result = curl_easy_setopt( curlSessionHandle, CURLOPT_URL, "sftp://wi-19981-rda_at_10.35.78.113/~/Users/wi-19981-rda/Device_A/some_file" );

The exact URL is going to be server-dependent. But, if the server supports ~
for the user's home directory then the URL will probably be
sftp://wi-19981-rda_at_10.35.78.113/~/Device_A/some_file Or, to use an absolute
path, something like sftp://wi-19981-rda_at_10.35.78.113/Users/wi-19981-rda/Device_A/some_file

> I tried converting the slashes to the Windows format
> "sftp:\\wi-19981-rda_at_10.35.78.113\\~\\Users\\wi-19981-rda\\Device_A\\some_file"
> but then libcurl signals a protocol error.

Which makes sense since that isn't a URL.

> I'm already specifying the protocol in another option call, so is it necessary to specify the protocol in the CURLOPT_URL call as well?

What option call? The protocol is part of the scheme in the URL so I'm not sure
what you can pass in as a URL that excludes that.

> 4. Does the D: drive need to be explicitly listed in the path, or is it enough to use the /~/?

That's probably up to the server. If the user's home directory is on D: and the
URL uses a ~ to specify the home directory and the server supports ~ then yes,
that should be good enough.

Dan
-------------------------------------------------------------------
Unsubscribe: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2020-10-19