
Легкий и быстрый обмен файлами из командной строки. Этот код содержит сервер со всем, что вам нужно для создания собственного экземпляра.
Transfer.SH в настоящее время поддерживает поставщиков S3 (Amazon S3), GDRIVE (Google Drive), Storj (Storj) и локальной файловой системы (Local).
@stefanbenten является сопровождающим этого репозитория и человека, который проводит хорошо известную публичную установку программного обеспечения в репо.
Они в любом случае не связаны, и репо не является местом для направления запросов и проблем для любой из паббической установки.
Никакая государственная установка программного обеспечения в репо не будет объявлена или упоминается в самой репо по соображениям безопасности.
Официальная позиция меня, @ASPACCA, в качестве сопровождающего репо, заключается в том, что если вы хотите использовать программное обеспечение, вы должны размещать собственную установку.
$ curl -v --upload-file ./hello.txt https://transfer.sh/hello.txt$ gpg --armor --symmetric --output - /tmp/hello.txt | curl --upload-file - https://transfer.sh/test.txt$ curl https://transfer.sh/1lDau/test.txt | gpg --decrypt --output /tmp/hello.txt$ curl -X PUT --upload-file nhgbhhj https://transfer.sh/test.txt/virustotal$ curl -X DELETE < X-Url-Delete Response Header URL > $ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H " Max-Downloads: 1 " # Limit the number of downloads$ curl --upload-file ./hello.txt https://transfer.sh/hello.txt -H " Max-Days: 1 " # Set the number of days before deletion$ curl --upload-file ./hello.txt https://your-transfersh-instance.tld/hello.txt -H " X-Encrypt-Password: test " # Encrypt the content sever side with AES265 using "test" as password$ curl https://your-transfersh-instance.tld/BAYh0/hello.txt -H " X-Decrypt-Password: test " # Decrypt the content sever side with AES265 using "test" as password URL -адрес использовался для запроса удаления файла и возвращался в качестве заголовка ответа.
curl -sD - --upload-file ./hello.txt https://transfer.sh/hello.txt | grep -i -E ' transfer.sh|x-url-delete '
x-url-delete: https://transfer.sh/hello.txt/BAYh0/hello.txt/PDw0NHPcqU
https://transfer.sh/hello.txt/BAYh0/hello.txtСм. Примеры хорошего использования.
Создать ссылку на прямую загрузку:
https://transfer.sh/1ldau/test.txt -> https://transfer.sh/get/1ldau/test.txt
Встроенный файл:
https://transfer.sh/1ldau/test.txt -> https://transfer.sh/inline/1ldau/test.txt
| Параметр | Описание | Ценить | Эн |
|---|---|---|---|
| слушатель | Порт для использования для http (: 80) | Слушатель | |
| профиль-listener | Порт для использования для профилировщика (: 6060) | Profile_listener | |
| Force-HTTPS | перенаправить на HTTPS | ЛОЖЬ | Force_https |
| TLS-Listener | Порт для использования для HTTPS (: 443) | Tls_listener | |
| TLS-Listener | Флаг, чтобы включить только слушатель TLS | Tls_listener_only | |
| TLS-CERT-FILE | Переход к сертификату TLS | Tls_cert_file | |
| TLS-Private-Key | Путь к частному ключу TLS | Tls_private_key | |
| http-auth-user | Пользователь для базовой HTTP Auth при загрузке | Http_auth_user | |
| http-auth-pass | Пропустите базовую http auth при загрузке | Http_auth_pass | |
| http-auth-htpasswd | Htpasswd Pail Pail для базовой HTTP Auth при загрузке | Http_auth_htpasswd | |
| HTTP-Auth-IP-WhiteList | Запятая разделена список IPS, разрешенных загружать, не будучи оспариванием HTTP Auth | Http_auth_ip_whitelist | |
| IP-WhiteList | Компа | IP_WHITELIST | |
| IP-BlackList | Компа | Ip_blacklist | |
| температура | Путь к папке Temp | система темп | Temp_path |
| Веб-пути | Путь к статическим веб -файлам (для разработки или пользовательского фронта) | Web_path | |
| прокси-пат | ПРИФИКС ПАТИ, когда обслуживание запускается за прокси -сервером | Proxy_path | |
| Прокси-порт | Порт прокси, когда обслуживание запускается за прокси | Proxy_port | |
| по электронной почте контакт | Электронная почта контакта для фронта | Email_contact | |
| Ga-Key | Google Analytics Key для фронта | GA_KEY | |
| поставщик | Какой поставщик хранения использовать | (S3, Storj, Gdrive или Local) | |
| Uservoice-ключ | Пользовательский голосовой ключ для фронта | Uservoice_key | |
| AWS-Access-Key | AWS Access Key | Aws_access_key | |
| AWS-Secret-Key | AWS Access Key | Aws_secret_key | |
| ведро | АВС ведро | ВЕДРО | |
| S3-ENDPOINT | Пользовательская конечная точка S3. | S3_endpoint | |
| S3-Region | область ведра S3 | ЕС-Вест-1 | S3_region |
| s3-no-multipart | Отключает загрузку Multipart S3 | ЛОЖЬ | S3_no_multipart |
| S3-Path-стиль | Прикалывает URL -адреса стиля, необходимых для мини -. | ЛОЖЬ | S3_path_style |
| Storj-Access | Доступ к проекту | Storj_access | |
| Сторж-Бакет | Ведро для использования в рамках проекта | Storj_bucket | |
| основанный | Хранение пути для местного/GDRIVE -провайдера | Основанный | |
| Gdrive-Client-JSON-FILEPATH | Path to Oauth Client JSON Config для поставщика GDRIVE | Gdrive_client_json_filepath | |
| GDRIVE-LOCAL-CONFIG-PATH | Путь к хранению локального кеша конфигурации. | Gdrive_local_config_path | |
| Gdrive-Chunk-Size | Размер куски для загрузки GDRIVE в мегабайтах должен быть ниже, чем в доступной памяти (8 МБ) | Gdrive_chunk_size | |
| Lets-Encrypt-Hosts | Хозяева для использования для сертификатов Let Encrypt (разлученная запятая) | Хозяева | |
| бревно | Путь к файлу журнала | БРЕВНО | |
| CORS-DOMAINS | Запятая разделена список доменов для CORS, установление IT включить CORS | Cors_domains | |
| Кламав-Хост | хост для функции Clamav | Clamav_host | |
| Выполнить Кламув-Прескан | ПРЕСКАНА каждая загрузка через функцию Clamav (Clamav-Host должен быть локальным гнездом Clamd Unix) | Exective_clamav_prescan | |
| ограничение скорости | запрос в минуту | Rate_limit | |
| Max-Upload-Size | максимальный размер загрузки в килобитах | Max_upload_size | |
| Чистки | количество дней после автоматического очищения загрузок | Purge_days | |
| чистка-интервал | Интервал за несколько часов для запуска автоматической чистки (не применимо к S3 и Storj) | Purge_interval | |
| случайная длина | Длина случайного токена для пути загрузки (вдвое больше для пути удаления) | 6 | Random_token_length |
Если вы хотите использовать TLS с помощью сертификатов Lets Encrypt, установите LetS-Encrypt-Hosts в свой домен, установите TLS-Listener на: 443 и включите Force-HTTPS.
Если вы хотите использовать TLS, используя свои собственные сертификаты, установите TLS-Listener на: 443, Force-HTTPS, TLS-Cert-File и TLS-Private-Key.
Переключен на GO111MODULE
go run main.go --provider=local --listener :8080 --temp-path=/tmp/ --basedir=/tmp/$ git clone [email protected]:dutchcoders/transfer.sh.git
$ cd transfer.sh
$ go build -o transfersh main.goДля легкого развертывания мы создали официальный контейнер 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 --basedir /tmp/Вы также можете построить контейнер самостоятельно. Это позволяет вам выбрать, какой UID/GID будет использоваться, например, при использовании NFS Mounts:
# Build arguments:
# * RUNAS: If empty, the container will run as root.
# Set this to anything to enable UID/GID selection.
# * PUID: UID of the process. Needs RUNAS != "". Defaults to 5000.
# * PGID: GID of the process. Needs RUNAS != "". Defaults to 5000.
docker build -t transfer.sh-noroot --build-arg RUNAS=doesntmatter --build-arg PUID=1337 --build-arg PGID=1338 . Для использования с ведром AWS S3 вам просто нужно указать следующие параметры:
--provider s3AWS_ACCESS_KEY )AWS_SECRET_KEY )BUCKET с переменной среды)S3_REGION )Если вы указываете S3-регион, вам не нужно устанавливать URL конечной точки, так как правильная конечная точка будет использоваться автоматически.
Чтобы использовать пользовательского поставщика S3, не являющегося AWS, вам необходимо указать конечную точку, как определено от вашего облачного поставщика.
Чтобы использовать сеть Storj в качестве поставщика хранения, вам необходимо указать следующие флаги:
--provider storjВам необходимо создать грант доступа (или скопировать его из конфигурации восходящей линии связи) и ведро в подготовке.
Чтобы начать, войдите в свою учетную запись, перейдите в меню Access Grant и запустите мастер в правом верхнем углу.
Введите свое имя выбора доступа, нажмите дальше и ограничите его по мере необходимости/предпочтительным. После этого продолжается либо в CLI, либо в браузере. Далее вам будет предложено провести пасфразу, используемую в качестве ключа шифрования. Обязательно сохраните его в безопасном месте. Без этого вы потеряете возможность расшифровать свои файлы!
После этого вы можете скопировать грант доступа, а затем начать запуск конечной точки Transfer.sh. Рекомендуется предоставить как грант доступа, так и имя ведра в качестве переменных ENV для повышения безопасности.
Пример:
export STORJ_BUCKET=<BUCKET NAME>
export STORJ_ACCESS=<ACCESS GRANT>
transfer.sh --provider storj
Для использования с Google Drive вам необходимо указать следующие параметры:
Вам необходимо создать идентификатор клиента OAuth с console.cloud.google.com, загрузить файл и поместить его в безопасный каталог.
go run main.go --provider gdrive --basedir /tmp/ --gdrive-client-json-filepath /[credential_dir] --gdrive-local-config-path [directory_to_save_config]
transfer () (if [ $# -eq 0 ] ; then printf " No arguments specified.nUsage:n transfer <file|directory>n ... | transfer <file_name>n " >&2 ; return 1 ; fi ; file_name= $( basename " $1 " ) ; if [ -t 0 ] ; then file= " $1 " ; if [ ! -e " $file " ] ; then echo " $file : No such file or directory " >&2 ; return 1 ; fi ; if [ -d " $file " ] ; then cd " $file " || return 1 ; file_name= " $file_name .zip " ; set -- zip -r -q - . ; else set -- cat " $file " ; fi ; else set -- cat ; fi ; url= $( " $@ " | curl --silent --show-error --progress-bar --upload-file " - " " https://transfer.sh/ $file_name " ) ; echo " $url " ; ) $ transfer hello.txt
transfer ()
{
local file
declare -a file_array
file_array=( " ${ @ } " )
if [[ " ${file_array[@]} " == " " || " ${1} " == " --help " || " ${1} " == " -h " ]]
then
echo " ${0} - Upload arbitrary files to " transfer.sh " . "
echo " "
echo " Usage: ${0} [options] [<file>]... "
echo " "
echo " OPTIONS: "
echo " -h, --help "
echo " show this message "
echo " "
echo " EXAMPLES: "
echo " Upload a single file from the current working directory: "
echo " ${0} " image.img " "
echo " "
echo " Upload multiple files from the current working directory: "
echo " ${0} " image.img " " image2.img " "
echo " "
echo " Upload a file from a different directory: "
echo " ${0} " /tmp/some_file " "
echo " "
echo " Upload all files from the current working directory. Be aware of the webserver's rate limiting!: "
echo " ${0} * "
echo " "
echo " Upload a single file from the current working directory and filter out the delete token and download link: "
echo " ${0} " image.img " | awk --field-separator= " : " '/Delete token:/ { print $ 2 } /Download link:/ { print $ 2 }' "
echo " "
echo " Show help text from " transfer.sh " : "
echo " curl --request GET " https://transfer.sh " "
return 0
else
for file in " ${file_array[@]} "
do
if [[ ! -f " ${file} " ]]
then
echo -e " e[01;31m' ${file} ' could not be found or is not a file.e[0m " >&2
return 1
fi
done
unset file
fi
local upload_files
local curl_output
local awk_output
du -c -k -L " ${file_array[@]} " >&2
# be compatible with "bash"
if [[ " ${ZSH_NAME} " == " zsh " ]]
then
read $' upload_files? e [01;31mDo you really want to upload the above files ( ' " ${ # file_array[@]} " $' ) to "transfer.sh"? (Y/n): e [0m '
elif [[ " ${BASH} " == * " bash " * ]]
then
read -p $' e [01;31mDo you really want to upload the above files ( ' " ${ # file_array[@]} " $' ) to "transfer.sh"? (Y/n): e [0m ' upload_files
fi
case " ${upload_files :- y} " in
" y " | " Y " )
# for the sake of the progress bar, execute "curl" for each file.
# the parameters "--include" and "--form" will suppress the progress bar.
for file in " ${file_array[@]} "
do
# show delete link and filter out the delete token from the response header after upload.
# it is important to save "curl's" "stdout" via a subshell to a variable or redirect it to another command,
# which just redirects to "stdout" in order to have a sane output afterwards.
# the progress bar is redirected to "stderr" and is only displayed,
# if "stdout" is redirected to something; e.g. ">/dev/null", "tee /dev/null" or "| <some_command>".
# the response header is redirected to "stdout", so redirecting "stdout" to "/dev/null" does not make any sense.
# redirecting "curl's" "stderr" to "stdout" ("2>&1") will suppress the progress bar.
curl_output= $( curl --request PUT --progress-bar --dump-header - --upload-file " ${file} " " https://transfer.sh/ " )
awk_output= $( awk
' gsub("r", "", $0) && tolower($1) ~ /x-url-delete/
{
delete_link=$2;
print "Delete command: curl --request DELETE " """delete_link""";
gsub(".*/", "", delete_link);
delete_token=delete_link;
print "Delete token: " delete_token;
}
END{
print "Download link: " $0;
} ' <<< " ${curl_output} " )
# return the results via "stdout", "awk" does not do this for some reason.
echo -e " ${awk_output} n "
# avoid rate limiting as much as possible; nginx: too many requests.
if (( ${ # file_array[@]} > 4 ))
then
sleep 5
fi
done
;;
" n " | " N " )
return 1
;;
* )
echo -e " e[01;31mWrong input: ' ${upload_files} '.e[0m " >&2
return 1
esac
}$ ls -lh
total 20M
-rw-r--r-- 1 < some_username > < some_username > 10M Apr 4 21:08 image.img
-rw-r--r-- 1 < some_username > < some_username > 10M Apr 4 21:08 image2.img
$ transfer image *
10240K image2.img
10240K image.img
20480K total
Do you really want to upload the above files (2) to " transfer.sh " ? (Y/n):
# ####################################################################################################################################################################################################################################### 100.0%
Delete command: curl --request DELETE " https://transfer.sh/wJw9pz/image2.img/mSctGx7pYCId "
Delete token: mSctGx7pYCId
Download link: https://transfer.sh/wJw9pz/image2.img
# ####################################################################################################################################################################################################################################### 100.0%
Delete command: curl --request DELETE " https://transfer.sh/ljJc5I/image.img/nw7qaoiKUwCU "
Delete token: nw7qaoiKUwCU
Download link: https://transfer.sh/ljJc5I/image.img
$ transfer " image.img " | awk --field-separator= " : " ' /Delete token:/ { print $2 } /Download link:/ { print $2 } '
10240K image.img
10240K total
Do you really want to upload the above files (1) to " transfer.sh " ? (Y/n):
# ####################################################################################################################################################################################################################################### 100.0%
tauN5dE3fWJe
https://transfer.sh/MYkuqn/image.imgВзносы приветствуются.
Ремко Верхоф
UVIS Grinfelds
Андреа Спакка
Стефан Бентен
Код и документация Copyright 2011-2018 Ремко Верхоф. Код и документация Copyright 2018-2020 Andrea Spacca. Код и документация Copyright 2020- Андреа Спакка и Стефан Бентен.
Код, выпущенный по лицензии MIT.