web-dev-qa-db-ja.com

ソースから最新のカールを構築してsftp経由でファイルをダウンロードできるようにするにはどうすればよいですか?

Sftpサーバーからファイルをダウンロードする必要があります。残念ながら、Ubuntuのcurlバージョン

7.58.0-2ubuntu3.6 AMD64

sftpをサポートしていません。

エラーメッセージが表示される

Protocol "sftp" not supported or disabled in libcurl

ファイルをダウンロードしようとしたとき。したがって、ソースからcurlを構築して、sftpを許可したいと思います。どうすればそれを達成できますか?

6
k0pernikus

注:サードパーティのソースからソフトウェアをインストールすると、安全上のリスクがあります。次の手順を実行する前に、ソースを信頼していることを確認してください。


まず、 libssh がインストールされている必要があります。

たとえば、tarballが必要です。

https://www.libssh2.org/download/libssh2-1.8.2.tar.gz

Extactとインストール:

cd libssh2-1.8.1
./configure
make
Sudo make install

次に、必ず既存のcurlをアンインストールしてください。

Sudo apt purge curl

Curl libsをアンインストールすることも推奨されていることを読みました。 libcurl3-gnutls、しかし、失いたくない依存関係がたくさんあることに気付いたので、それを維持しました。アンインストールプロセスには注意してください。

そして3番目に、ソースから build curl するために、curlプロジェクトのクローンを作成します。

$ git clone https://github.com/curl/curl.git

そのリポジトリには、ビルド方法に関する有用な情報を含む GIT-INFO ファイルが含まれており、プロセスは将来変更される可能性があるため、それを調べると役立つ場合があります。

私のために働いたのは、それをビルドすることでした:

./buildconf
./configure
./configure --disable-libcurl-option --disable-shared --with-libssh2=/usr/local 
make
Sudo make install

curlSudo make uninstallを介したアンインストールをサポートします。問題がある場合、またはさまざまなフラグを試す場合に役立ちます。)

Curlが特定のcurl独自のコマンドを見つけるのに問題があり、それを実行しようとすると失敗することに気付いたので、共有ライブラリを使用しませんでした。私は次のようなエラーを見ました:

curl: symbol lookup error: curl: undefined symbol: curl_url_cleanup
curl: error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory

しかし、上記のアプローチでは、sftpがサポートされているプロトコル内に表示されるため、sftpをサポートするcurlが機能しています。

$ curl -V
curl 7.64.1-DEV (x86_64-pc-linux-gnu) libcurl/7.64.1-DEV OpenSSL/1.1.0g zlib/1.2.11 libssh2/1.8.1
Release-Date: [unreleased]
Protocols: dict file ftp ftps Gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp 
Features: AsynchDNS HTTPS-proxy IPv6 Largefile libz NTLM NTLM_WB SSL TLS-SRP UnixSockets

sftpサーバーからファイルをダウンロードすることを確認できます。


出典:次の方法で必要な手順を見つけました:

5
k0pernikus