18

I have installed curl-7.27.0 and it is working fine. However, when I run curl -V, I get:

curl 7.21.6 (i686-pc-linux-gnu) libcurl/7.21.6 OpenSSL/1.0.0e zlib/1.2.3.4 libidn/1.22 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp smtp smtps telnet tftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz

How do I enable SFTP protocol?

4 Answers 4

16

You have to compile curl with sftp support first.

Download and unpack the curl source. After that:

sudo apt-get install build-essential debhelper libssh2-1-dev
sudo apt-get source libcurl3
sudo apt-get build-dep libcurl3

cd curl-x.xx.x/debian

nano rules

find and replace "--without-libssh2" with "--with-libssh2"

cd ..

sudo dpkg-buildpackage

cd ..

sudo dpkg -i curl_xxxxx.deb
sudo dpkg -i libcurl3_xxxx.deb
sudo dpkg -i libcurl3-gnutls_xxxx.deb

Update the commands with the adequate versions, ofcourse. More info here.

3
  • I have gone through that when I googled it, how ever there is a small problem I am facing with in that. what you have menssioned up there is there in this link. <br/> ** 1) how ever I could not find curl-x.xx.x/debian directory or file anywhere even after extracting curl source? <br/> 2) Might be possible that I do not have an idea which is the right source? how ever the source I download is in this Curl Source
    – Hrish
    Oct 3, 2012 at 3:32
  • Still I would like to thank you for at least trying to resolve the issue and request you to please check on the 2 issues that I have mentioned up here. have a gr8 time.
    – Hrish
    Oct 3, 2012 at 3:39
  • Here's what I put together today based on Frantique's answer - gist.github.com/matschaffer/966b95d160d02d377700 Dec 21, 2015 at 7:33
7

If you can't find --without-libssh2 to replace with --with-libssh2 you can search for --without-ssl and append --with-libssh2, tested with curl Version 7.35.0 on Ubuntu 14.04.2

Customized answer from Frantique:

Download and unpack the curl source. After that:

sudo apt-get install build-essential debhelper libssh2-1-dev
sudo apt-get source libcurl3
sudo apt-get build-dep libcurl3

cd curl-*/debian

nano rules

Find --without-ssl and append --with-libssh2, in my case, it looks like this:

Before

cd debian/build && dh_auto_configure ${CONFIGURE_ARGS}          \
        --with-ca-path=/etc/ssl/certs
cd debian/build-gnutls &&  dh_auto_configure ${CONFIGURE_ARGS}  \
        --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt     \
        --without-ssl --with-gnutls
cd debian/build-nss && dh_auto_configure ${CONFIGURE_ARGS}      \
        --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt     \
        --without-ssl --with-nss

After

cd debian/build && dh_auto_configure ${CONFIGURE_ARGS}          \
        --with-ca-path=/etc/ssl/certs --with-libssh2
cd debian/build-gnutls &&  dh_auto_configure ${CONFIGURE_ARGS}  \
        --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt     \
        --without-ssl --with-gnutls --with-libssh2
cd debian/build-nss && dh_auto_configure ${CONFIGURE_ARGS}      \
        --with-ca-bundle=/etc/ssl/certs/ca-certificates.crt     \
        --without-ssl --with-nss --with-libssh2

Now build the packages:

cd ..
sudo dpkg-buildpackage
cd ..

sudo dpkg -i curl_*.deb
sudo dpkg -i libcurl3_*.deb
sudo dpkg -i libcurl3-gnutls_*.deb

Here is another good tutorial for your issue.

More info on Frantique's answer.

5

Frantique's answer worked for me - however when I tried to upgrade my system, my package manager wanted to revert the installation back to a curl that does not have sftp/scp.

To avoid having to reinstall curl with sftp/scp after every upgrade:

sudo aptitude hold libcurl3
sudo aptitude hold libcurl3-gnutls

Use apt-mark if you use apt.

Read this page if you want more info on preventing updates of a specific package.

Note that eventually some future upgrade may not be able to go forward until you remove the hold.

If by chance you are using PHP and need sftp in curl - you should check out phpseclib which might be much easier to install and maintain.

1
  • Should 'curl' also be held, or is this not necessary? May 24, 2016 at 21:44
3

Here is how to build curl with libssl support for Ubuntu 18.04. LTS:

sudo apt-get install build-essential debhelper libssh-dev
sudo apt-get source curl
sudo apt-get build-dep curl

cd curl-*

Download the Patch and patch the debian/rules:

wget https://bugs.launchpad.net/ubuntu/+source/curl/+bug/311029/+attachment/5234644/+files/ubuntu_libssl.patch
sudo patch debian/rules < /ubuntu_libssl.patch
  • Or alternativ replace in the file the debian/rules:

    CONFIGURE_ARGS += --without-libssh2` 
    

    with

    CONFIGURE_ARGS += --with-libssh2
    

Then build and install the packages:

sudo dpkg-buildpackage -uc -us -b
# -us Do not sign the source package.
# -uc Do not sign the .changes file.
# -b Do not try to apply changes to the unpacked upstream

cd ..

sudo dpkg -i curl_*.deb
sudo dpkg -i libcurl3-*.deb
sudo dpkg -i libcurl3-gnutls_*.deb

sudo apt-mark hold curl
sudo apt-mark hold libcurl3
sudo apt-mark hold libcurl3-gnutls
# sudo apt-mark unhold <package-name>

Hope that helps somebody.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .