プログラミング
Croc: 2台のコンピュータ間で安全にファイルやフォルダを転送する
Croc: Securely transfer files and folders between two computers (github.com)
要約
Crocは、コマンドラインインターフェース(CLI)を使用して、任意の2台のコンピュータ間でファイルやフォルダを安全かつ簡単に転送できるツールです。エンドツーエンド暗号化、クロスプラットフォーム対応、中断した転送の再開機能などを備えており、ローカルサーバーやポートフォワーディングなしで利用できます。インストール方法や詳細な使用方法、リレーサーバーの自己ホストについても解説されています。
全文翻訳
このプロジェクトの将来はコミュニティのサポートにかかっています。今すぐスポンサーになりましょう。
Crocについて
Crocは、任意の2台のコンピュータ間でファイルやフォルダをシンプルかつ安全に転送できるツールです。私の知る限り、Crocは以下のすべてを行う唯一のCLIファイル転送ツールです。
リレーを使用して任意の2台のコンピュータ間でデータを転送できる
エンドツーエンド暗号化(PAKEを使用)を提供する
簡単なクロスプラットフォーム転送(Windows、Linux、Mac)を可能にする
複数のファイル転送を許可する
中断された転送を再開できる
ローカルサーバーやポートフォワーディングが不要
IPv6優先でIPv4フォールバックに対応
Torのようなプロキシを使用できる
Crocの詳細については、私のブログ記事をご覧いただくか、最近行ったインタビューをお読みください。
インストール
お使いのシステム用の最新リリースをダウンロードするか、コマンドラインからリリースをインストールできます。
curl https://getcroc.schollz.com | bash
macOS
Homebrewを使用:
brew install croc
MacPortsを使用:
sudo port selfupdate
sudo port install croc
Windows
Scoop、Chocolatey、またはWingetで最新リリースをインストールできます。
scoop install croc
choco install croc
winget install schollz.croc
nix-envを使用
Nixで最新リリースをインストールできます。
nix-env -i croc
NixOS
これをconfiguration.nixに追加できます。
environment.systemPackages = [ pkgs.croc ];
Alpine Linux
まず、依存関係をインストールします。
apk add bash coreutils
wget -qO- https://getcroc.schollz.com | bash
Arch Linux
pacmanでインストールします。
pacman -S croc
Fedora
dnfでインストールします。
dnf install croc
Gentoo
portageでインストールします。
emerge net-misc/croc
Termux
pkgでインストールします。
pkg install croc
FreeBSD
pkgでインストールします。
pkg install croc
Linux、macOS、Windows(Conda経由)
pixiでグローバルにconda-forgeからインストールできます。
pixi global install croc
またはcondaで特定の環境にインストールします。
conda install --channel conda-forge croc
Linux、macOS(Docker経由)
以下のワンライナー関数を~/.profileに追加します(任意のPOSIX準拠シェルで動作します)。
croc() { [ $# -eq 0 ] && set -- ""; mkdir -p "$HOME/.config/croc"; docker run --rm -it --user "$(id -u):$(id -g)" -v "$(pwd):/c" -v "$HOME/.config/croc:/.config/croc" -w /c -e CROC_SECRET docker.io/schollz/croc "$@"; }
現在のセッションでは、単にターミナルに貼り付けることもできます。初回実行時にDockerはイメージをプルします。Docker経由のCrocは、現在のディレクトリとそのサブディレクトリ内でのみ機能します。
ソースからビルド
希望する場合は、Goをインストールしてソースからビルドできます(Go 1.22+が必要です)。
go install github.com/schollz/croc/v10@latest
Android
サードパーティ製のF-Droidアプリが利用可能です。
使用方法
ファイルを送信するには、次のようにします。
$ croc send [ファイル(複数可)またはフォルダ]
'file-or-folder'(X MB)を送信中
コードは: code-phrase
次に、別のコンピュータでファイル(またはフォルダ)を受信するには、次を実行します。
croc code-phrase
コードフレーズは、パスワード認証鍵合意(PAKE)を確立するために使用され、送信者と受信者がエンドツーエンド暗号化に使用する秘密鍵を生成します。
カスタマイズとオプション
LinuxまたはmacOSでCrocを使用する
LinuxおよびmacOSでは、プロセス名による秘密情報の漏洩を避けるため、送信および受信プロセスが若干異なります。秘密鍵を環境変数としてCrocを実行する必要があります。たとえば、秘密鍵***で受信するには次のようにします。
CROC_SECRET=*** croc
シングルユーザーシステムでは、次のコマンドを実行することでデフォルトの動作を永続的に有効にできます。
croc --classic
カスタムコードフレーズ
独自のコードフレーズ(6文字以上)で送信できます。
croc send --code [コードフレーズ] [ファイル(複数可)またはフォルダ]
プロンプトなしの上書きを許可する
ファイルをプロンプトなしで自動的に上書きするには、--overwriteフラグを使用します。
croc --yes --overwrite <code>
フォルダの除外
送信からフォルダを除外するには、コンマ区切りの除外リストとともに--excludeフラグを使用します。
croc send --exclude "node_modules,.venv" [フォルダ]
パイプの使用 - stdinとstdout
Crocにパイプできます。
cat [ファイル名] | croc send
ファイルを受信トレイにパイプするには、次を使用できます。
croc --yes [コードフレーズ] > out
テキストの送信
URLや短いテキストを送信するには、次を使用します。
croc send --text "hello world"
複数のファイルの送信
ファイルおよび/またはフォルダを直接リストすることで、複数のファイルを送信できます。
croc send [ファイル1] [ファイル2] [ファイル3] [フォルダ1] [フォルダ2]
QRコードの表示
QRコード(モバイルデバイス用)を表示するには、次を使用します。
croc send --qr [ファイル(複数可)またはフォルダ]
プロキシの使用
--socks5を追加することで、プロキシ経由でファイルを送信できます。
croc --socks5 "127.0.0.1:9050" send SOMEFILE
暗号化曲線(Encryption Curve)の変更
暗号化に使用する楕円曲線を選択するには、--curveフラグを使用します。
croc --curve p521 <コードフレーズ>
ハッシュアルゴリズムの変更
より高速なハッシュ処理のために、imohashアルゴリズムを使用します。
croc send --hash imohash SOMEFILE
クリップボードオプション
デフォルトでは、コードフレーズはクリップボードにコピーされます。これを無効にするには、次のようにします。
croc --disable-clipboard send [ファイル名]
(Linux/macOSで役立つ)秘密鍵を環境変数として含む完全なコマンドをコピーするには、次を使用します。
croc --extended-clipboard send [ファイル名]
これは、CROC_SECRET="code-phrase" croc(リレー/パスフラグを含む)のような完全なコマンドをコピーします。
静寂モード(Quiet Mode)
すべての出力を抑制するには(スクリプトや自動化に便利)、次を使用します。
croc --quiet send [ファイル名]
リレーサーバーの自己ホスト
独自の(リレー)サーバーを実行できます。
croc relay
デフォルトでは、TCPポート9009-9013を使用します。ポートをカスタマイズできます(例: croc relay --ports 1111,1112)。ただし、少なくとも2つのポートが必要です。リレーを使用してファイルを送信するには、次のようにします。
croc --relay "myrelay.example.com:9009" send [ファイル名]
リレーサーバーの自己ホスト(Docker経由)
Dockerを使用してリレーを実行することもできます。
docker run -d -p 9009-9013:9009-9013 -e CROC_PASS='YOURPASSWORD' docker.io/schollz/croc
カスタムリレーを使用してファイルを送信するには、次のようにします。
croc --pass YOURPASSWORD --relay "myreal.example.com:9009" send [ファイル名]
カスタムポートを使用するには、CROC_PORTS(カンマ区切り)またはCROC_PORT(ベースポート)を設定します。
docker run -d -p 9010-9011:9010-9011 -e CROC_PORTS='9010,9011' -e CROC_PASS='YOURPASSWORD' docker.io/schollz/croc
謝辞
Crocは多くのイテレーションを経て進化してきました。貢献に感謝します!
特に以下の方々に感謝します。
@warner アイデア提供
@tscholl2 暗号化gist
@skorokithakis 2つの接続のプロキシ
その他多数!