How to enable SFTP Support in cURL?
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?
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.
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.
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.
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.