Windows / Linux向けの対話式SSHランチャー兼SFTPファイルマネージャーです。
接続先とユーザーを選択した後、通常のSSHセッションを開くか、ローカルとリモートを左右に表示するファイル転送画面を開けます。
- OpenSSHの
sshコマンド - 接続先でSFTPサブシステムが利用できること
- Cloudflare Accessを使う場合は
cloudflaredとOpenSSHのProxyCommand設定
.NET SDKや.NET Runtimeを利用端末へ別途インストールする必要はありません。ReleaseまたはGitHub Actionsの成果物として生成されるself-contained版を使用します。
SSHの鍵、known_hosts、ホスト別設定、ProxyCommandはOpenSSH自身に処理させます。my-ssh側へ秘密鍵やCloudflareの設定を複製しません。
配布された実行ファイルをPATHに置き、次のどちらかで起動します。
my-ssh
myssh
既存の登録情報を変更せずに試す場合は、my-ssh --config-dir <別の設定フォルダ>で起動できます。
Server
-> User
-> Action
|- Open SSH
`- File Transfer
サーバーとユーザーは追加・削除できます。登録ユーザーが1件の場合は自動入力されます。ユーザー名入力ではTabによる最長共通接頭辞までの補完を利用できます。
左右2ペインでローカルとリモートを操作します。
Tab: ペイン/転送一覧のフォーカス移動Space: 複数選択Enter: ディレクトリを開く / ファイルをプレビューF2: 名前変更F5: 反対側へコピーF6: 反対側へ移動F7: ディレクトリ作成F9: その他の操作、転送制御Delete: 永久削除Esc: 接続先のAction選択へ戻る
転送キューでは一時停止、再開、再試行、上書き、キャンセル、完了項目の削除を行えます。
アプリ独自の帯域制限はありません。SFTPの読み書きは32 KiBの要求を最大64件(2 MiB)まで先行送信し、通信の往復待ちを減らします。OpenSSH sftpの標準と同じ要求数です。転送後の内容確認にも同じ方式を使用します。
転送完了前に元ファイルと転送先の内容を読み直して整合性を確認するため、表示上のコピーが終わった後も通信が続くことがあります。実際の速度は回線、SSH接続経路、サーバーやディスクの性能、小さいファイルの数によって変わります。
8 MiB以上のリモートファイルは、SSHでサーバー側のSHA-256を取得できる場合、検証用の全内容の再転送を省きます。サーバーにbash、timeout、head、sha256sumが必要です。追加の認証入力が必要な接続やSFTP専用サーバー、未対応環境では従来のSFTP読み取り検証へ自動的に戻ります。ファイルの照合・変更検出は省略しません。
検証中はVerifying destination/sourceを先頭に表示します。従来の読み直しでは検証専用の進捗%と読み取り速度(MB/s)、サーバー側の計算中は経過秒数を表示し、転送時の速度やETAと区別します。
通常ファイルは転送先と同じディレクトリの一時ファイルへ書き込み、完了後に確定します。中断した一時ファイルから再開する場合は、既存部分と元ファイルを比較して一致を確認してから続行します。
上書き時、リモート側ではOpenSSHのposix-rename@openssh.comが利用できる場合のみ、既存ファイルを置き換える確定処理を行います。対応していないサーバーでは既存ファイルを先に削除せず、エラーとして扱います。
移動はコピーが完了してから元データを削除します。コピー後の削除だけ失敗した場合は部分成功として区別します。
シンボリックリンクは既定でリンクそのものを扱い、再帰コピーでリンク先を自動追跡しません。
Windows:
%APPDATA%\my-ssh\config.json
%APPDATA%\my-ssh\state.json
Linux:
$XDG_CONFIG_HOME/my-ssh/
XDG_CONFIG_HOMEが未指定の場合は~/.config/my-ssh/です。
旧PowerShell版のconfig.jsonは初回起動時に読み込み、config.json.v1.bakを作成してから新形式へ移行します。
ソースはC# / .NET 10です。通常利用者がローカルでコンパイルすることは前提としていません。
GitHub ActionsでWindowsとUbuntuのビルド・テストを実行し、次のself-contained single-file成果物を生成します。
win-x64linux-x64linux-arm64
ローカルで開発する場合のみ.NET 10 SDKが必要です。
dotnet restore MySsh.slnx
dotnet build MySsh.slnx -c Release
dotnet run --project tests/MySsh.Tests/MySsh.Tests.csproj -c Release
src/
MySsh.App/ Terminal.GuiによるCUI
MySsh.Core/ 接続・ファイル・転送モデル
MySsh.Infrastructure/ OpenSSH/SFTP、ローカルFS、設定、転送処理
tests/
MySsh.Tests/ クロスプラットフォームのスモークテスト
.github/workflows/
ci.yml Windows/Linuxビルド、テスト、配布物生成
CIのUbuntuジョブでは、一時的な鍵を使うループバック限定のOpenSSHサーバーに接続し、1 MiB超の転送、Unicode名、再帰コピー、上書き、リンク、権限、移動、中断後の再開、不一致の途中データの拒否も検証します。実際の利用先サーバーやCloudflare Accessの認証とは別のテストです。
WSL / Linuxでも、CIのmy-ssh-tests-linux-x64成果物を展開し、chmod +x MySsh.Testsの後、bash tests/run-sftp-local.sh /展開先/MySsh.Testsで同じ実転送テストを実行できます。OpenSSHサーバーのsshdが必要です。テスト用サーバーは通常ユーザーでループバックの22222番ポートに起動し、終了時に停止します。既存のSSH設定・サービスは変更しません。ポートが使用中の場合はMYSSH_TEST_PORTで空きポートを指定してください。
my-sshはMITライセンスで公開しています。
同梱のTerminal.Guiのソースには元のMITライセンスと著作権表示が適用されます。取り込み元と修正内容も記載しています。配布物には両方のライセンスを含めます。