Встречались ли вы с такой проблемой?
Вы работаете в производственной среде с подключением к Интернету, но не можете извлечь логи или перехваченные пакеты с защищенного сервера для устранения неполадок.
Вот сайт, который может помочь вам в этой ситуации.
Вам не нужно открывать брандмауэр, чтобы разрешить sftp-соединение для захвата файлов, или включать веб-службу, чтобы дать себе ссылку для их загрузки.
Пока ваши серверы могут выходить в Интернет, вы сможете спокойно передавать файлы.
Transfer.sh – это такой сайт, который может предоставить вам простой, легкий и быстрый сервис для обмена файлами из командной строки.
Он бесплатен и позволяет загружать до 10 ГБ данных, а файлы хранятся в течение 14 дней.
Ранее мы уже рассмотрели этот инструмент:
Transfer.sh – простой и безопасный обмен файлами из командной строки Linux
Шаги по использованию Transfer.sh
Существует достаточно много вариантов использования, которые перечислены на сайте transfer.sh.
Можно загружать несколько файлов и шифровать их, можно использовать wget для загрузки, а также можно использовать его из Windows PowerShell.
В этом разделе я перечислю шаги для простого случая использования, который заключается в загрузке одного файла с сервера linux с настройками по умолчанию.
1. Войдите в систему Linux
2. Загрузить файл
Загрузка одного файла с настройками по умолчанию:
curl -v --upload-file ./hello.txt https://transfer.sh/hello.txt
* Trying 144.76.136.153:443...
* Connected to transfer.sh (144.76.136.153) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* Server certificate:
* subject: CN=transfer.sh
* start date: Aug 14 19:42:51 2023 GMT
* expire date: Nov 12 19:42:50 2023 GMT
* subjectAltName: host "transfer.sh" matched cert's "transfer.sh"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* using HTTP/2
* h2 [:method: PUT]
* h2 [:scheme: https]
* h2 [:authority: transfer.sh]
* h2 [:path: /hello.txt]
* h2 [user-agent: curl/8.1.2]
* h2 [accept: */*]
* h2 [content-length: 34559]
* Using Stream ID: 1 (easy handle 0x7fd872c60080)
> PUT /hello.txt HTTP/2
> Host: transfer.sh
> User-Agent: curl/8.1.2
> Accept: */*
> Content-Length: 34559
>
* We are completely uploaded and fine
< HTTP/2 200
< content-type: text/plain
< server: Transfer.sh HTTP Server
< x-made-with: <3 by DutchCoders
< x-served-by: Proudly served by DutchCoders
< x-url-delete: https://transfer.sh/xVaLXBfwcD/hello.txt/wx9PGrancWLzyeSV55EU
< content-length: 40
< date: Sun, 08 Oct 2023 15:55:01 GMT
<
* Connection #0 to host transfer.sh left intact
https://transfer.sh/xVaLXBfwcD/hello.txt[node1] (local) root@192.168.0.28
3. Откройте URL-адрес из любого браузера для получения файла
ffsend – как легко и безопасно обмениваться файлами из командной строки Linux с помощью Firefox Send Client
Шаги по использованию на своем хостинге с Docker
Для удобства развертывания автор transfer.sh создал официальный Docker контейнер.
Ниже приведены шаги, которые мы можем выполнить, чтобы запустить docker за 1 минуту.
1. Развернуть docker
Существует два варианта, отличающихся только тем, какой пользователь запускает процесс.
По умолчанию он запускается от имени root:
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest --provider local --basedir /tmp/
Тот, который помечен суффиксом -noroot, будет использовать 5000 в качестве UID и GID:
docker run --publish 8080:8080 dutchcoders/transfer.sh:latest-noroot --provider local -
2. Передача файлов
curl -v --upload-file /docker.log https://transfer.sh/hello.txt
* Trying 144.76.136.153:443…
* Connected to transfer.sh (144.76.136.153) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: none
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* Server certificate:
* subject: CN=transfer.sh
* start date: Aug 14 19:42:51 2023 GMT
* expire date: Nov 12 19:42:50 2023 GMT
* subjectAltName: host “transfer.sh” matched cert’s “transfer.sh”
* issuer: C=US; O=Let’s Encrypt; CN=R3
* SSL certificate verify ok.
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* using HTTP/2
* h2 [:method: PUT]
* h2 [:scheme: https]
* h2 [:authority: transfer.sh]
* h2 [:path: /hello.txt]
* h2 [user-agent: curl/8.1.2]
* h2 [accept: */*]
* h2 [content-length: 34559]
* Using Stream ID: 1 (easy handle 0x7fd872c60080)
> PUT /hello.txt HTTP/2
> Host: transfer.sh
> User-Agent: curl/8.1.2
> Accept: */*
> Content-Length: 34559
>
* We are completely uploaded and fine
< HTTP/2 200
< content-type: text/plain
< server: Transfer.sh HTTP Server
< x-made-with: <3 by DutchCoders
< x-served-by: Proudly served by DutchCoders
< x-url-delete: https://transfer.sh/xVaLXBfwcD/hello.txt/wx9PGrancWLzyeSV55EU
< content-length: 40
< date: Sun, 08 Oct 2023 15:55:01 GMT
<
* Connection #0 to host transfer.sh left intact
https://transfer.sh/xVaLXBfwcD/hello.txt[node1] (local) root@192.168.0.28 ~
3. Получим файл из любого браузера, обратившись к url, сгенерированному на шаге 2
Поиск и устранение неисправностей
Сообщение об ошибке: wrong version number
Причиной ошибки является наличие сертификата TLSv1.3.
Сервис Transfer.sh требует TLSv1.3, но Play-with-docker предоставляет только OpenSSL/3.1.1.
Чтобы решить эту проблему, можно убрать https из url.
curl -v --upload-file docker.log https://ip172-18-0-88-ckhdj44snmng00biqpe0-8080.direct.labs.play-with-docker.com/docker.log
* Trying 40.76.55.146:443...
* Connected to ip172-18-0-88-ckhdj44snmng00biqpe0-8080.direct.labs.play-with-docker.com (40.76.55.146) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* CAfile: /etc/ssl/certs/ca-certificates.crt
* CApath: none
* OpenSSL/3.1.1: error:0A00010B:SSL routines::wrong version number
* Closing connection 0
curl: (35) OpenSSL/3.1.1: error:0A00010B:SSL routines::wrong version number
После удаления https мы имеем http-соединение из командной строки с нашим Docker.
Все пакеты будут передаваться в открытом текстовом формате.
curl -v --upload-file docker.log ip172-18-0-88-ckhdj44snmng00biqpe0-8080.direct.labs.play-with-docker.com/docker.log
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 40.76.55.146:80…
* Connected to ip172-18-0-88-ckhdj44snmng00biqpe0-8080.direct.labs.play-with-docker.com (40.76.55.146) port 80 (#0)
> PUT /docker.log HTTP/1.1
> Host: ip172-18-0-88-ckhdj44snmng00biqpe0-8080.direct.labs.play-with-docker.com
> User-Agent: curl/8.1.2
> Accept: */*
> Content-Length: 34560
>
} [34560 bytes data]
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Content-Type: text/plain
< Server: Transfer.sh HTTP Server
< X-Made-With: <3 by DutchCoders
< X-Served-By: Proudly served by DutchCoders
< X-Url-Delete: http://ip172-18-0-88-ckhdj44snmng00biqpe0-8080.direct.labs.play-with-docker.com/QwR2c1UDRs/docker.log/Q8DwSFS1yrr7GVoVQOOV
< Date: Sun, 08 Oct 2023 16:39:48 GMT
< Content-Length: 101
<
{ [101 bytes data]
100 34661 100 101 100 34560 2543 849k --:--:-- --:--:-- --:--:-- 890k
* Connection #0 to host ip172-18-0-88-ckhdj44snmng00biqpe0-8080.direct.labs.play-with-docker.com left intact
http://ip172-18-0-88-ckhdj44snmng00biqpe0-8080.direct.labs.play-with-docker.com/QwR2c1UDRs/docker.log
см. также: