Skip to content

CLI

利用できるオプションはバージョンによって異なります。インストール済みのsshc helpで全体の一覧を、sshc <command...> --helpまたはsshc help <command...>で各コマンドの正確な引数を確認できます。例えばsshc sync push --helpsshc help terminal sendを利用できます。

SSH接続、SFTP転送、同期、Terminal操作の各コマンドは、起動中のエンジンと、そのエンジンが管理するOpenSSH設定、Vault、セッションを使います。sshc infosshc completionなど、情報をローカルで読み取るだけのコマンドはエンジンを必要としません。自動化では、人向けの表示文を解析せず、対応するコマンドの--jsonを利用できます。

CodexなどのAIエージェントからも直接実行できます。非対話SSHでは、Vaultのロックが解除され、接続経路にあるすべてのホスト鍵と必要な認証情報が保存済みである必要があります。接続先へ割り当てたTOTPも、明示的なOTP質問には自動入力できます。未登録のホスト鍵や未保存の認証情報など、利用者の入力や判断が必要な接続は実行できません。条件を満たす場合はsshcが認証するため、AIエージェントへ認証情報そのものを渡す必要はありません。

エンジンとVault

sh
sshc engine
sshc engine --port 60001
sshc engine --replace
sshc
sshc open
sshc status --json
sshc version
sshc vault status
sshc vault create
sshc vault unlock
sshc vault lock
sshc vault change-password
sshc service install
sshc service status
sshc service disable
sshc update

引数なしのsshcは起動中のエンジンから1回限りのURLを取得してブラウザーで開き、sshc openはURLを表示するだけでブラウザーを起動しません。sshc engine --port <n>(1024〜65535)は待ち受けポートを固定します。sshc version-v--version)はこのバイナリの版を表示し、sshc vault statussshc statusと同じ表にVaultの状態を含めて表示します。

Vaultのマスターパスワードなどを対話入力すると、入力した値の代わりに*を表示します。入力値がTerminalのスクロールバックへ平文で残ることはありません。

sshc serviceはLinuxではsystemdユーザーサービス、macOSではlaunchdユーザーエージェントを管理します。installはHomebrewまたはinstall.shで導入された安定パスを登録し、disableはsshcが作成した定義だけを削除します。installdisableupdateは変更内容を表示してから確認を求めます。自動化で確認を省略する場合だけ-yまたは--yesを付けてください。

sshc vault change-passwordは、現在のパスワードでEnterを押すと検証してから新しいパスワードを尋ねます。パスワードレスでは現在のパスワード入力を省きます。新しいパスワードと確認を両方空欄にすると、パスワード保護を外せます。パスワードレスに対するsshc vault lockは解錠状態を維持します。ロックを使う場合はマスターパスワードを設定してください。CLI更新後はエンジンも再起動して変更を反映してください。

OTP

sh
sshc otp list [--json]
sshc otp <name>
sshc otp show <name> --json
sshc otp add <name>
sshc otp edit <name>
sshc otp remove <name> [-y|--yes]

listは保存名と割り当て先だけを表示します。sshc otp <name>またはshowは、時刻の境界付近でも確認できるよう、ひとつ前・現在・ひとつ後のコードと現在コードの残り秒数を表示します。セットアップキーはエンジン内に留まり、表示結果やJSONには含めません。

addeditは対話ターミナルでBase32セットアップキーまたはotpauth:// URIを受け取り、入力中は値の代わりに*を表示します。使用中のTOTPは、先にConnectionsで割り当てを解除しない限りremoveできません。

SSH

sh
sshc ssh
sshc ssh --list
sshc ssh <alias>
sshc ssh <alias> --non-interactive -- <command...>
sshc info <alias> --json

Homebrew版ではbash、zsh、fishの補完が一緒に導入されます。その他の導入方法では、利用中のシェルに合わせて次のいずれかをシェルの初期化ファイルへ追加してください。サブコマンド、オプション、列挙値に加え、sshc sshsshc infosshc terminal create sshsshc sftpでは接続先も補完します。接続先候補は、Tabを押した時点の~/.ssh/configと到達可能なIncludeから取得されます。シェル展開やコマンド連結につながるメタ文字、空白、先頭の-などを含むエイリアスは、sshc ssh --listと補完候補から除外し、理由を標準エラー出力へ表示します。

コマンドの解釈、個別ヘルプ、bash/zsh/fishの補完は、同じコマンド定義から作られています。補完に表示される名前や選択肢は、そのバージョンのsshc helpと一致します。

sh
# bash
source <(sshc completion bash)

# zsh
source <(sshc completion zsh)

# fish
sshc completion fish | source

Linuxでは、システムのBash補完がHomebrewの補完ディレクトリを探さない場合があります。ファイル名しか出ないときは、現在のシェルでsource <(sshc completion bash)を実行してください。同じ行を~/.bashrcに追加すれば、新しいシェルでも現在のコマンド定義を読み込みます。更新後も古い候補が残る場合は、現在のシェルでも読み込み直してください。

sshc infoでは、エンジンを起動せずに、実際の接続時と同じ規則でIncludeMatchProxyJump、文字コードを読み、最終的に使われる値を確認できます。保存済みの認証情報、SetEnvの値、ProxyCommandの本文は表示されません。

非対話コマンドは次の形式です。

sh
sshc ssh bastion --non-interactive -- uname -a

Sync

sh
sshc sync setup
sshc sync --json
sshc sync push [--force] [--json]
sshc sync pull [--force] [--json]
sshc sync now [--json]
sshc sync auto on|off [--json]

sshc sync setupは、設定済みのエンドポイント、バケット、パス、リージョン、同期方向を既定値として表示します。同期方向はbothpushpullから選びます。Access Key IDは末尾5文字だけを伏せ字付きで表示し、Secret Access Keyと同期キーは値を表示せず「設定済み」と示します。再設定時は秘密値を空のままEnterキーで進むと、エンジンに保存済みの値を維持します。新しい値の入力中は、平文の代わりに*を表示します。

SFTP転送

起動中のエンジンと、Web UIと同じOpenSSH設定、ホスト鍵の検証、Vaultの認証情報を使って転送します。リモートパスは/var/log/app.logのような絶対POSIXパスで指定します。

sh
sshc sftp get bastion /var/log/app.log ./app.log
sshc sftp put bastion ./release.tar.gz /tmp/release.tar.gz
sshc sftp get bastion /srv/data ./data --recursive
sshc sftp put bastion ./public /var/www/public --recursive
sshc sftp get bastion /srv/archive ./archive --recursive --jobs 4
sshc sftp get bastion /srv/archive ./archive --recursive --max-total-size 8192
sshc sftp settings
sshc sftp settings --split-size 73 --split-jobs 6 --chunk-size 41
sshc sftp get bastion /backup/disk.img ./disk.img --split-size 100 --split-jobs 4 --chunk-size 512
sshc sftp put bastion ./disk.img /backup/disk.img --split-size 100 --split-jobs 4 --chunk-size 512

sshc sftp settingsは、WebとCLIが共通で使う分割開始サイズ、1ファイルの接続数、チャンクサイズを表示します。同じコマンドへ--split-size(16〜1024 MiB)、--split-jobs(1〜128)、--chunk-size(8〜4096 MiB)を付けると、指定した項目だけを既定値として保存します。--jsonでは保存後の値を機械可読形式で取得できます。

-jまたは--jobsには、同時に転送するファイル数を1〜8で指定します。既定は1です。getputへ分割オプションを付けた場合は、保存済みの既定値をその実行だけ上書きします。--split-jobs 1は分割しません。初期値は100 MiB以上、1接続(分割しない)、32 MiBチャンクです。並列にするには--split-jobsでその実行の接続数を指定するか、sshc sftp settings --split-jobsかWebの転送マネージャーで既定値を変えてください。ワンタイムコードで認証するホストは、指定に関わらず1接続で転送します。--split-jobsは最大128まで指定できますが、実際の接続数は未転送チャンク数までです。複数ファイルを同時に分割転送すると合計接続数が増えるため、接続先と端末の上限に合わせて指定してください。通常ファイルはアップロード、ダウンロードともに512 GiBまで転送できます。

再帰ダウンロードは、選択したルート以下の深さ64段、ファイルとディレクトリを合わせて10,000項目、合計1,024 MiBを既定の安全上限とします。上限に達した場合は何も転送せずに停止します。意図して大きなツリーを取得する場合だけ、--max-depth(最大256)、--max-entries(最大1,000,000)、--max-total-size(MiB単位、最大8 TiB)でその実行の上限を引き上げてください。これらはget --recursive専用です。

putgetは、転送したファイルに元の更新日時を付けます。シンボリックリンクはWinSCPやscpと同じくリンク先として転送し、ディレクトリへのリンクはその中身ごと送ります。リンク先が無いリンクと、ファイルでもディレクトリでもないものは、その項目だけをskipとして標準エラーへ表示して飛ばし、結果のskippedに数えます。ディレクトリを--recursiveで送るときは必要なリモートディレクトリを作りますが、ファイル1つのputは送り先のディレクトリが無ければremote_directory_missingで止まります。新しく作られるファイルの権限はサーバーの既定(umask)に従い、上書きしたファイルは元の権限を保ちます。

対話ターミナルでsshc sftp getを実行すると、エンジンがリモートファイルを準備している間の進捗を接続ごとに表示します。分割している場合は接続ごとの進捗バーになります。分割しない転送は1本です。--jsonや出力先が対話ターミナルでない場合は進捗表示を行わず、機械処理する出力を汚しません。

既存ファイルは暗黙に上書きしません。上書きする場合は--overwriteを付けると実行前にまとめて確認し、--yesを併用した場合だけ確認を省略します。既存ファイルを残す場合は--skip-existing、変更せず転送計画だけ確認する場合は--dry-runを利用できます。自動化では--jsonを付けると標準出力へ1つのJSON結果を出し、進捗は標準エラー出力へ分離します。Ctrl+Cで中断したアップロードでは、sshcがリモート側に作成した一時ファイルも削除します。

Serial / Telnet

sh
sshc serial
sshc serial /dev/ttyUSB0 --baud 9600
sshc telnet console.example:23

SerialとTelnetの対話接続はCtrl+]で切断できます。Telnetは通信を暗号化せず、サーバーも認証しません。

Terminal操作

起動中のエンジンが管理するTerminalセッションを別のプロセスから確認、作成、操作できます。

sh
sshc terminal list --json
sshc terminal create ssh bastion --json
sshc terminal create shell --json
sshc terminal show <session-id> --json
sshc terminal read <session-id> --cursor 0 --limit 4096 --json
sshc terminal send <session-id> --text 'uptime' --json
sshc terminal send <session-id> --text 'partial input' --no-enter
sshc terminal wait <session-id> --for connected --timeout 30s --json
sshc terminal rename <session-id> deploy
sshc terminal close <session-id>

create shellはエンジン側のローカルシェルを開きます。sendは既定で末尾にEnter(CR)を付け、--no-enterで付けません。

readでは、保持しているスクロールバックと次回指定する読み取り位置を取得できます。指定した位置の出力がすでに破棄されている場合は、現在残っている先頭から返し、そのことを警告に含めます。sendは、確認後にセッション内のプロセスが入れ替わっていた場合には何も送信しません。