如何在 cURL 中启用 SFTP 支持?

如何在 cURL 中启用 SFTP 支持?

我已经安装了 curl-7.27.0,它运行正常。但是,当我运行 时curl -V,我得到:

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

如何启用 SFTP 协议?

答案1

您必须curl首先使用 sftp 支持进行编译。

下载并解压 curl 源代码。之后:

sudo apt-get 安装 build-essential debhelper libssh2-1-dev
sudo apt-get 源 libcurl3
sudo apt-get build-dep libcurl3

cd curl-x.xx.x/debian

纳米规则

找到“--without-libssh2”并将其替换为“--with-libssh2”

光盘 ..

sudo dpkg-buildpackage

光盘 ..

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

当然,使用适当的版本更新命令。更多信息这里

答案2

如果找不到--without-libssh2要替换的内容,--with-libssh2可以搜索--without-ssl附加 --with-libssh2,使用 curl 版本测试7.35.0Ubuntu 14.04.2

Frantique 的定制答案:

下载并解压 curl 源代码。之后:

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

查找 --without-ssl并附加--with-libssh2,就我而言,它看起来像这样:

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

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

现在构建包:

cd ..
sudo dpkg-buildpackage
cd ..

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

这是另一个很好的教程针对您的问题。

有关 Frantique 的回答的更多信息。

答案3

Frantique 的回答对我很有帮助 - 但是当我尝试升级我的系统时,我的包管理器想要将安装恢复到没有 sftp/scp 的 curl。

为了避免每次升级后都必须使用 sftp/scp 重新安装 curl:

sudo aptitude hold libcurl3
sudo aptitude hold libcurl3-gnutls

如果您使用 apt,请使用 apt-mark。

阅读此页如果您想了解有关阻止特定软件包更新的更多信息。

请注意,最终某些未来的升级可能无法进行,直到您取消保留。

如果你碰巧使用 PHP 并且需要 curl 中的 sftp - 你应该看看phpseclib这可能会更容易安装和维护。

答案4

以下是如何为 Ubuntu 18.04. LTS 构建支持 libssl 的 curl:

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

cd curl-*

下载补丁并修补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
  • 或者替代方案在文件中替换debian/rules

    CONFIGURE_ARGS += --without-libssh2` 
    

    CONFIGURE_ARGS += --with-libssh2
    

然后构建并安装软件包:

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>

希望这对某人有帮助。

相关内容