Как включить поддержку SFTP в cURL?
Я установил curl-7.27.0 и он работает нормально, но когда он не работает, запустите команду ниже, чтобы узнать, работает ли она сейчас, но она показала, что:
Результат команды curl -V
root @ ubuntu: ~ / 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
Протоколы: файл dict ftp ftps gopher http https imap imaps ldap pop3 pop3s rtmp rtsp smtp smtps telnet tftp
Особенности: GSS-согласование IDN IPv6 Largefile NTLM SSL libz
4 ответа
Вы должны скомпилировать curl
сначала с поддержкой sftp.
Скачайте и распакуйте исходный код. После этого:
sudo apt-get установить build-essential debhelper libssh2-1-dev sudo apt-get source libcurl3 sudo apt-get build-dep libcurl3 cd curl-x.xx.x / debian нано правила
найти и заменить "--without-libssh2" на "--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
Обновите команды соответствующими версиями, конечно. Больше информации здесь.
Если вы не можете найти --without-libssh2
заменить на --with-libssh2
вы можете искать --without-ssl
и добавить --with-libssh2
, протестировано с помощью curl версии 7.35.0 на Ubuntu 14.04.2
Индивидуальный ответ от Frantique:
Скачайте и распакуйте исходный код. После этого:
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 сработал для меня - однако, когда я попытался обновить свою систему, мой менеджер пакетов захотел вернуть установку обратно в curl без sftp/scp.
Чтобы избежать переустановки curl с помощью sftp / scp после каждого обновления:
sudo aptitude hold libcurl3
sudo aptitude hold libcurl3-gnutls
Используйте apt-mark, если вы используете apt.
Прочтите эту страницу, если вы хотите больше информации о предотвращении обновления определенного пакета.
Обратите внимание, что в конечном итоге некоторые будущие обновления могут не продвинуться, пока вы не уберете удержание.
Если случайно вы используете PHP и вам нужен sftp в curl - вы должны проверить phpseclib, который может быть намного проще в установке и обслуживании.
Вот как собрать curl с поддержкой libssl для 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-*
Скачать патч и патч 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
# -us Do not sign the source package.
# -uc Do not sign the .changes file.
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>
Надеюсь, это кому-нибудь поможет.