CURL命令无法执行AWS实例

问题描述

我已经设置了配置了sftp服务器的aws ec2 linux设备。

我可以使用以下命令将curl命令从linux服务器的cli发送到aws实例:

curl sftp://username:password@ec2-instance/dir/

但是当我从下面的python代码中使用相同的命令时,它不起作用

curl_easy_setopt(curl,CURLOPT_UPLOAD,sftp://username:password@ec2-instance/dir);

它说curl不支持或禁用协议sftp *关闭连接1 卷曲错误1

我想知道为什么它可以与CLI一起使用,但不能从代码中使用。 当我尝试使用pysftp时,结果也是一样。 任何帮助,将不胜感激。谢谢。

解决方法

默认情况下,ubuntu上的curl命令未启用sftp,我建议您使用using this的要点从源代码进行编译。

我已经对此进行了测试,可以在ubuntu 18.04 LTS上使用。

此Gist链接包含以下文件:

  • build_curl_sftp.sh文件可以直接在Ubuntu上使用它们
    操作系统。

  • Dockerfile文件可以在启用cURL命令的情况下构建Docker映像
    支持SFTP,并且可以使用cURL命令而不会污染原始文件
    主机操作系统上的cURL命令。

此处复制了相同的要点供参考:

#!/bin/bash

export CPPFLAGS=-I/usr/local/include
export LDFLAGS="-L/usr/local/lib -Wl,-rpath,/usr/local/lib"
export LIBS="-ldl"

sudo sed -i -e "s/# deb-src /deb-src /g" /etc/apt/sources.list
sudo apt-get update
sudo apt-get install -y build-essential debhelper libssh-dev

cd /opt/

# Fetch cURL source code
sudo apt-get source curl
sudo apt-get build-dep -y curl
cd curl-*/debian/ && sudo sed -i -e "s@CONFIGURE_ARGS += --without-libssh2@CONFIGURE_ARGS += --with-libssh2@g" rules
cd curl-*/ && sudo dpkg-buildpackage -uc -us -b

# Install rebuilding packages
sudo dpkg -i curl_*.deb
sudo dpkg -i libcurl3-*.deb
sudo dpkg -i libcurl3-gnutls_*.deb
sudo dpkg -i libcurl4-gnutls-dev_7.58.0-2ubuntu3.8_amd64.deb libcurl4_7.58.0-2ubuntu3.8_amd64.deb