
2025/12/21 21:33
**Show HN:** **Shittp – SSH経由で共有する一時的なDotfile(設定ファイル)**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
shittp は、SSH を介してユーザーの dotfiles(
.profile、.vimrc、.tmux.conf などを含む ~/.config/shittp ディレクトリをパッケージ化し、tar アーカイブにまとめて base64 エンコードした後、遠隔側でスクリプトを実行してファイルを復元し、セットアップスクリプトを読み込み、エイリアス(vim、tmux など)付きの対話型シェルを起動し、一時データをクリーンアップする軽量 POSIX‑shell ユーティリティです。このツールは標準ユーティリティ (
ssh, tar, base64, mktemp) のみで構成され、次のように一行でインストールできます:
curl -fsSL https://raw.githubusercontent.com/FOBshippingpoint/shittp/refs/heads/main/install.sh | sh
コマンドフロー:パック → 伝送(base64 文字列 + スクリプト)→ 遠隔側でアンパック → 初期化 → クリーンアップ。
オプションと環境変数:
--config-dir DIR, --client CLIENT, -v/--version; コマンドとして where や print など; 環境変数として SHITTP_CONFIG_DIR, SHITTP_SSH_CLIENT, SHITTP_HOME。
Docker 統合:
docker run -it alpine /bin/sh -c "$(shittp print)"
これにより、dotfiles をコンテナに注入できます。
制限事項:OS の
ARG_MAX 限界(Alpine では約 100 K ファイル)により、大規模な設定で失敗する可能性があります。
開発とテスト:shellcheck、shellspec、および Docker を使用し、Makefile ターゲットには
help, lint, unit, integration, build, clean が含まれます。
このプロジェクトは、gzip/gunzip + Bash で構成された以前の kyrat ツールから進化し、tar を使用した POSIX 互換実装へと変わりました。ラップトップ、サーバー、またはコンテナ間で迅速かつ再現可能なシェル設定が必要な開発者に最適です。
本文
shittp – SSH を使ってドットファイルをリモートマシンへ簡単に転送
インストール
必要な依存関係: POSIX シェル、
ssh、tar、base64、mktemp
curl -fsSL https://raw.githubusercontent.com/FOBshippingpoint/shittp/refs/heads/main/install.sh \ --output install.sh chmod +x install.sh ./install.sh
使い方
-
ローカルでドットファイルを編集する
cd ~/.config/shittp echo 'aloha() { echo hello; }' >> .profile $EDITOR .vimrc $EDITOR .tmux.conf -
リモートホストへログイン
shittp john@other.machine john$ aloha # 出力: hello john$ vim # エイリアスは "vim -u $SHITTP_HOME/.vimrc" john$ tmux # エイリアスは "tmux -L shittp -f $SHITTP_HOME/.tmux.conf" -
Docker コンテナを使う場合
docker run -it alpine /bin/sh -c "$(shittp print)" $ aloha # 出力: hello
動作概要
| ステップ | 説明 |
|---|---|
| Pack | ドットファイルを tar でアーカイブし、base64 文字列へ変換します。 |
| Transport | base64 文字列とセットアップスクリプトを SSH のリモートコマンドとして送ります。 |
| Unpack | リモート側で base64 をデコードし、一時ディレクトリに展開します。 |
| Init | セットアップスクリプトを して対話型シェルを起動します。 |
| Cleanup | 切断後に一時ディレクトリを削除します。 |
元々のアイデアは kyrat(
gzip/gunzip と Bash を使用)から来ており、shittp は
tar と POSIX 互換シェルで実装されています。
ヘルプ情報
shittp [options]... [command] [ssh_options]... destination [-- ssh_command]
オプション
| オプション | 説明 |
|---|---|
| ヘルプリストを表示します。 |
| 設定ディレクトリを指定します。(デフォルト: ) |
| SSH クライアントコマンドを指定します。(デフォルト: ) |
| shittp のバージョンを表示します。 |
コマンド
| コマンド | 説明 |
|---|---|
| デフォルトの設定ディレクトリパスを表示します。 |
| SSH を実行せずにコマンド文字列だけを出力します(Docker 用)。 |
例
基本的な SSH ログイン
shittp -oStrictHostKeyChecking=no john@example.com
リモート関数の実行
shittp john@example.com -- foo bar # または shittp -oRemoteCommand='foo bar' john@example.com
Docker 連携
docker run -it alpine /bin/sh -c "$(shittp print)"
Dropbear クライアント使用時
shittp --client dbclient john@example.com
環境変数
| 変数 | スコープ | 説明 |
|---|---|---|
| Local | ドットファイルが置かれているディレクトリ。(デフォルト: ) |
| Local | SSH クライアントのパス( で上書き)。 |
| Local/Remote | リモート側で使用するシェルパス。 |
| Local/Remote | tarball を展開するディレクトリ。 |
| Remote | のパス。 が表示されない場合はここを してください。 |
| Remote | shittp が正常に初期化されたら 1 に設定されます。 |
制限事項
大きな構成ファイルは OS の最大引数長(
ARG_MAX)制限で読み込み失敗する場合があります。Alpine Linux では 100 KB 程度のファイルがエラーを起こすことがあります。
二段階 SSH 接続 (
tar czf - | ssh host tar xzf -) は解決策ですが、パスフレーズを2回入力する必要があります。
開発
必要な依存関係:
shellcheck、shellspec、docker.
make help
Makefile ターゲット
| ターゲット | 説明 |
|---|---|
| このヘルプを表示します。 |
| shellcheck を実行します。 |
| shellspec でユニットテストを実行します。 |
| 統合テストスクリプトを実行します。 |
| ホームページ用のウェブサーバーを起動します。 |
| すべてのチェックを通過し、tarball をビルドします。 |
| ビルドステップで作成された shittp tarball を削除します。 |