Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

SFTPServer for Android

日本語 | English

Android 端末䞊で SFTP サヌバヌを動䜜させ、PC 等の SFTP クラむアントから端末のファむルシステム内郚ストレヌゞ・SD カヌドぞワむダレスにアクセス・ファむル転送できるようにするアプリです。

開発者向けの芁件、蚭蚈、品質基準、ロヌドマップは DEVELOP.md を参照しおください。


抂芁

本アプリは Android デバむスを SFTPSSH File Transfer Protocolサヌバヌずしお動䜜させ、同䞀 Wi-Fi ネットワヌク䞊の PC などからワむダレスでファむルを読み曞きできるようにしたす。USB ケヌブルなしで、䜿い慣れた SFTP クラむアントWinSCP、FileZilla、Cyberduck、OpenSSH の sftp コマンドなどから端末のストレヌゞぞアクセスできたす。

䞻な機胜

  • SFTP サヌバヌの起動/停止: ホヌム画面のワンタップボタンで起動・停止。皌働䞭は通知領域に垞駐衚瀺されたす。
  • 認蚌方匏
    • パスワヌド認蚌ナヌザヌ名・パスワヌドを蚭定画面から倉曎可胜
    • 公開鍵認蚌Ed25519 / ECDSA / RSA。最倧 10 鍵たで登録可胜。GitHub アカりントからの䞀括むンポヌトにも察応
    • 双方を個別に有効/無効化でき、いずれかで認蚌成功すればログむン可胜䞡方無効時はサヌバヌ起動䞍可
  • 読み取り専甚モヌド: 有効化するず、認蚌枈みナヌザヌであっおも曞き蟌み・削陀・リネヌム・ディレクトリ䜜成が拒吊されたす。
  • ブルヌトフォヌス察策: 同䞀 IP からの連続認蚌倱敗を怜知し、䞀時的に接続を拒吊したす。
  • フォアグラりンドサヌビスによる垞駐動䜜: アプリを閉じおも、垞駐通知からサヌバヌ状態の確認・停止操䜜ができたす。
  • ストレヌゞアクセス
    • ネむティブモヌド党ファむルアクセス暩限で内郚共有ストレヌゞや SD カヌドに盎接アクセス
    • SAF モヌドStorage Access Framework によるフォルダ遞択。遞択したフォルダのみに最小限の暩限でアクセス
  • 日本語・英語 UI: 端末蚀語に自動远埓、アプリ内で手動切り替えも可胜。
  • ログ機胜: 接続・転送・゚ラヌログのリアルタむム衚瀺、フィルタ、怜玢、共有。

動䜜環境

項目 芁件
OS Android 8.0 (API 26) 以䞊
タヌゲット SDK Android 14 (API 34)
ネットワヌク Wi-FiIPv4 / IPv6。SFTP クラむアントず同䞀ネットワヌクに接続しおいるこず
蚀語 日本語デフォルト・英語

本アプリは Google Play では配垃せず、APK ファむルを盎接配垃サむドロヌドする圢匏です。


むンストヌル手順

  1. 配垃された APK ファむル䟋: sftpserver-vX.Y.Z.apkを Android 端末にコピヌしたす。
  2. 端末で APK ファむルをタップしおむンストヌルを開始したす。
  3. 「提䟛元䞍明のアプリ」に関する譊告が衚瀺された堎合は、以䞋の手順で蚱可しおください。
    • Android 8〜10 ç³»: むンストヌル時のダむアログで「この゜ヌスを蚱可」を遞択
    • Android 11 以降: 「蚭定」→「アプリ」→「特別なアプリアクセス」→「䞍明なアプリのむンストヌル」から、APK を開いたアプリファむルマネヌゞャヌやブラりザに察しお蚱可を付䞎
  4. むンストヌル完了埌、アプリを起動したす。

Google Play 経由のむンストヌルではないため、Play Protect によるスキャン譊告が衚瀺されるこずがありたす。配垃元を信頌できる堎合はそのたたむンストヌルを継続しおください。

Obtainium でのむンストヌルず自動曎新

Obtainium を䜿うず、GitHub Releases から APK を盎接取埗し、継続的に自動曎新できたす。

  1. Obtainium アプリをむンストヌルしたすGitHub Releases たたは F-Droid から
  2. Obtainium を起動し、「アプリを远加」→「URL を入力」
  3. 以䞋のリポゞトリ URL を入力:
    https://github.com/thakyuu/SFTPServer_Android
    
  4. 「远加」をタップしたす。最新リリヌスの APK がむンストヌルされ、以降は自動的に曎新をチェックしお通知したす

初期蚭定

1. 認蚌情報の蚭定必須

初期認蚌情報はありたせん。サヌバヌを起動する前にナヌザヌ名を蚭定し、パスワヌド認蚌たたは公開鍵認蚌の少なくずも䞀方を利甚可胜にしおください。

  1. 「蚭定」→「認蚌」を開く
  2. ナヌザヌ名1〜32文字を蚭定する
  3. パスワヌド認蚌を䜿う堎合はパスワヌド8〜128文字を蚭定する。公開鍵認蚌を䜿う堎合は公開鍵を1件以䞊登録する
  4. 蚭定が完了するたでサヌバヌは起動できたせん

掚奚: パスワヌドは掚枬困難なものにし、可胜であれば公開鍵認蚌ぞの切り替えを掚奚したす。

2. ストレヌゞ暩限の付䞎

サヌバヌがファむルぞアクセスするために、いずれかのストレヌゞアクセス方匏の蚱可が必芁です。

  • ネむティブ掚奚・簡単: 「蚭定」→「ストレヌゞ」で「ネむティブ」を遞択し、党ファむルアクセスを求められたら蚱可したすAndroid 11 以降は「特別なアプリアクセス」→「党ファむルアクセス」の蚭定画面が開きたす。
  • SAFフォルダ遞択: 「蚭定」→「ストレヌゞ」で「SAFフォルダ遞択」を遞択し、「フォルダを遞択」から公開したいフォルダをシステムのフォルダ遞択 UI で遞びたす。遞択した暩限は氞続化され、再起動埌も有効です。

いずれの暩限も蚱可されおいない状態ではサヌバヌを起動できたせん。

ネむティブモヌドで SD カヌドぞアクセス

ネむティブモヌドのアクセス先ディレクトリ遞択ダむアログには、端末に挿入されおいる SD カヌド等の倖郚ボリュヌムが自動怜出され、プリセットずしお衚瀺されたす衚瀺名ず /storage/XXXX-XXXX 圢匏のパス。これを遞ぶず、SAF のフォルダ遞択 UI を経由せずに SD カヌドぞ盎接アクセスできたす。

  • Android 11API 30以降: 党ファむルアクセス暩限により SD カヌドぞの読み曞きが完党にサポヌトされたす。
  • Android 8〜10API 26〜29: プラットフォヌムの制玄により、SD カヌドセカンダリボリュヌムぞの 曞き蟌みができたせん。この区間で SD カヌドをネむティブモヌドのルヌトに蚭定するず、読み取り専甚モヌド「蚭定」→「サヌバヌ動䜜」→「読み取り専甚モヌド」が有効な堎合に限り読み取り専甚で起動できたす。曞き蟌みが必芁な堎合は SAFフォルダ遞択方匏を䜿甚しおください。「このフォルダには曞き蟌めたせん」ずいう゚ラヌが衚瀺された堎合は、この制玄が原因です。

3. アクセス先ディレクトリの遞択

「蚭定」→「ストレヌゞ」→「アクセス先ディレクトリ」で、SFTP 接続時に公開するフォルダを遞択したす。ネむティブモヌドの堎合はプリセット䟋: /storage/emulated/0たたは手入力、SAF モヌドの堎合はフォルダ遞択 UI で指定したす。クラむアントから遞択範囲より䞊䜍ぞ移動するこずはできたせん。皌働䞭に倉曎した堎合は、アプリがサヌバヌを安党に再起動しお反映したす。


䜿い方

サヌバヌの起動

  1. ホヌム画面の起動ボタンをタップしたす。
  2. 状態衚瀺が「皌働䞭」に倉わり、接続先の IP アドレス䞀芧ずポヌト番号が衚瀺されたすデフォルトポヌト: 2222。
  3. 耇数の IP アドレスWi-Fi、IPv6 等がある堎合は䞀芧から該圓するものを遞び、タップしおコピヌできたす。

接続文字列

ホヌム画面の「接続情報をコピヌ」ボタンから、以䞋の圢匏の接続文字列をクリップボヌドぞコピヌできたす。

sftp://<ナヌザヌ名>@<IP アドレス>:<ポヌト>

各クラむアントからの接続䟋

OpenSSHsftp コマンドmacOS・Linux・Windows

sftp -P 2222 user@192.168.1.10

初回接続時にホスト鍵の確認を求められたす。衚瀺されたフィンガヌプリントが、アプリの「蚭定」→「バヌゞョン情報」に衚瀺される内容ず䞀臎するこずを確認したうえで承認しおください。

公開鍵認蚌を䜿う堎合:

sftp -P 2222 -i ~/.ssh/id_ed25519 user@192.168.1.10

WinSCP

  1. 「新しいサむト」→ プロトコルに SFTP を遞択
  2. ホスト名: 端末の IP アドレス、ポヌト: 2222既定
  3. ナヌザヌ名・パスワヌド、たたは秘密鍵ファむルを蚭定
  4. 「ログむン」で接続

FileZilla

  1. 「サむトマネヌゞャヌ」→ 新しいサむトを䜜成
  2. プロトコル: SFTP - SSH File Transfer Protocol
  3. ホスト: 端末の IP アドレス、ポヌト: 2222
  4. ログオンの皮類: 「通垞」パスワヌド認蚌たたは「鍵ファむル」公開鍵認蚌
  5. 「接続」

Cyberduck

  1. 「新芏接続」→ プロトコルで SFTP (SSH File Transfer Protocol) を遞択
  2. サヌバヌ: 端末の IP アドレス、ポヌト: 2222
  3. ナヌザヌ名・パスワヌド、たたは SSH 秘密鍵を指定
  4. 「接続」

サヌバヌの停止

ホヌム画面の停止ボタン、たたは垞駐通知の「停止」アクションからサヌバヌを停止できたす。停止時には接続䞭の党セッションが安党に切断されたす。

皌働䞭の蚭定倉曎

ポヌト、認蚌、ネットワヌク公開範囲、ストレヌゞ、読み取り専甚モヌドなどサヌバヌ動䜜に圱響する蚭定を倉曎するず、アプリがサヌバヌを安党に再起動しお反映したす。再起動時は接続䞭のセッションが切断されたす。

GitHub から公開鍵をむンポヌト

「蚭定」→「認蚌」→「公開鍵を管理」画面の右䞊にあるむンポヌトアむコンから、GitHub アカりントに登録枈みの公開鍵をたずめお取り蟌めたす。

  1. むンポヌトアむコン雲マヌクをタップしたす。
  2. GitHub のナヌザヌ名を入力しお「OK」を抌したす。
  3. https://github.com/<ナヌザヌ名>.keysGitHub が無認蚌・平文で公開しおいる公開鍵䞀芧から鍵を取埗し、authorized_keys に远加されたす。コメントが付いおいない鍵には自動的に github:<ナヌザヌ名> ずいうコメントが付䞎され、由来が分かるようになりたす。
  4. 完了するず「远加 n ä»¶ / スキップ n ä»¶ / 倱敗 n 件」の圢匏で結果がスナックバヌに衚瀺されたす。すでに登録枈みの鍵重耇や登録䞊限10 件に達しおいる鍵はスキップずしおカりントされたす。

GitHub 偎にナヌザヌが存圚しない、公開鍵が 1 件も登録されおいない、通信に倱敗した堎合ぱラヌメッセヌゞが衚瀺されたす。本機胜は远加のパヌミッションや倖郚ラむブラリを必芁ずせず、既存の INTERNET 暩限のみで動䜜したす。


バッテリヌ最適化の陀倖蚭定

Android の倚くの端末では、バックグラりンドで動䜜するアプリをバッテリヌ消費削枛のため匷制終了するこずがありたす。SFTP サヌバヌをバックグラりンドで安定しお皌働させ続けるには、本アプリをバッテリヌ最適化の察象から陀倖するこずを匷く掚奚したす。

䞀般的な手順

  1. アプリの「蚭定」画面にある「バッテリヌ最適化」から「バッテリヌ最適化から陀倖」をタップしたす。
  2. システムダむアログが衚瀺されるので蚱可したす。
  3. 陀倖状態は蚭定画面に「陀倖枈み」「未陀倖」ずしお衚瀺されたす。
  4. システムダむアログが衚瀺されない、たたは効果がない堎合は、䞋蚘のメヌカヌ別手順も䜵せお確認しおください。

メヌカヌ別の远加蚭定

OS のバッテリヌ最適化陀倖だけでは䞍十分な端末メヌカヌがありたす。以䞋の手順も䜵せお蚭定しおくださいメニュヌ名は OS バヌゞョンにより倚少異なりたす。

Xiaomi / Redmi / POCOHyperOS・MIUI

  1. 「蚭定」→「アプリ」→「アプリを管理」→ 本アプリを遞択
  2. 「バッテリヌセヌバヌ」→「制限なし」を遞択
  3. 「自動起動」をオンにする
  4. 「蚭定」→「バッテリヌ」→「省電力」→ 本アプリを「制限なし」に蚭定
  5. HyperOS「セキュリティ」アプリ →「バッテリヌ」→「省電力蚭定」からも同様の陀倖蚭定を確認

HuaweiEMUI / HarmonyOS

  1. 「蚭定」→「アプリ」→「アプリ起動管理」→ 本アプリを遞択
  2. 「手動で管理」に切り替え、「自動起動」「二次起動」「バックグラりンドでの動䜜」をすべお有効化
  3. 「蚭定」→「バッテリヌ」→「アプリの起動」で同様に個別管理をオンにする

SamsungOne UI

  1. 「蚭定」→「アプリ」→ 本アプリを遞択 →「バッテリヌ」
  2. 「バックグラりンドでの䜿甚の制限なし」を遞択
  3. 「蚭定」→「バッテリヌずデバむスケア」→「バッテリヌ」→「バックグラりンドでの䜿甚を制限されたアプリ」に本アプリが含たれおいないこずを確認
  4. スリヌプ状態のアプリ未䜿甚アプリの自動終了リストから本アプリを陀倖

OPPO / OnePlusColorOS

  1. 「蚭定」→「バッテリヌ」→「アプリのバッテリヌ䜿甚」→ 本アプリを遞択 →「バックグラりンドでの実行を蚱可」を有効化
  2. 「蚭定」→「アプリ管理」→ 本アプリ →「バッテリヌ䜿甚の詳现蚭定」→「バックグラりンドで実行」を蚱可
  3. 「省゚ネモヌド」等の䞀括最適化リストから本アプリを陀倖

Google Pixel暙準 Android

  1. 「蚭定」→「アプリ」→「すべおのアプリ」→ 本アプリを遞択
  2. 「バッテリヌ」→「制限なし」を遞択
  3. 「アプリの䞀時停止」蚭定で本アプリが「未䜿甚のアプリを䞀時停止」察象から陀倖されおいるこずを確認

䞊蚘手順は OS バヌゞョンやカスタム UI のアップデヌトにより倉曎される堎合がありたす。衚蚘ず実際のメニュヌ名が異なる堎合は、端末の「バッテリヌ」「省電力」関連の蚭定内を確認しおください。


トラブルシュヌティング

クラむアントから接続できない

  • サヌバヌずクラむアントが同䞀 Wi-Fi ネットワヌクに接続されおいるか確認しおください。
  • ホヌム画面に衚瀺されおいるポヌト番号ずクラむアント偎の蚭定が䞀臎しおいるか確認しおください既定 2222。
  • 「蚭定」→「ネットワヌク」で「ロヌカルのみ」127.0.0.1 埅受が有効になっおいないか確認しおください。有効な堎合、同䞀端末以倖からは接続できたせん。
  • ルヌタヌや端末偎のファむアりォヌル蚭定でポヌトがブロックされおいないか確認しおください。
  • モバむルデヌタ通信のみで Wi-Fi に接続しおいない堎合、サヌバヌは到達可胜な IP アドレスを持たない可胜性がありたす。

暩限゚ラヌが衚瀺されるサヌバヌが起動しない

  • 「蚭定」→「ストレヌゞ」で、遞択䞭のストレヌゞ方匏ネむティブたたは SAFの暩限が蚱可されおいるか確認しおください。
  • ネむティブモヌドの堎合、党ファむルアクセスの蚱可がシステム蚭定䞊で無効化されおいないか確認しおください。
  • 認蚌方匏パスワヌド・公開鍵が䞡方ずも無効になっおいるずサヌバヌは起動できたせん。少なくずも䞀方を有効にしおください。
  • パスワヌド認蚌を䜿う堎合はパスワヌド、公開鍵認蚌だけを䜿う堎合は公開鍵が登録枈みか確認しおください。
  • 起動倱敗ダむアログに衚瀺される原因ず埩旧操䜜に埓っおください。

SAF で遞択したフォルダにアクセスできないURI 倱効

SD カヌドの抜き差しや OS のアップデヌト等により、SAF で遞択したフォルダぞの氞続アクセス暩限が倱効するこずがありたす。蚭定画面に「フォルダにアクセスできたせん」ずいう譊告が衚瀺された堎合は、「再遞択」からフォルダを遞び盎しおください。

接続時にホスト鍵の譊告が衚瀺される

初回接続時にクラむアントがホスト鍵の確認を求めるのは正垞な動䜜です。衚瀺されたフィンガヌプリントが、アプリの「蚭定」→「バヌゞョン情報」に衚瀺されおいるホスト鍵のフィンガヌプリントず䞀臎するこずを確認しおから承認しおください。アプリを再むンストヌルする、たたはホスト鍵を再生成するず、クラむアント偎で「ホスト鍵が倉曎された」ずいう譊告が衚瀺されたす。この堎合は新しいフィンガヌプリントを別経路で確認し、クラむアントの known_hosts から該圓゚ントリを削陀しお再接続しおください。心圓たりがない堎合は接続を䞭止しおください。

バックグラりンドで停止する

蚭定画面でバッテリヌ最適化の陀倖状態を確認し、端末メヌカヌ独自の自動起動・省電力・バックグラりンド制限も解陀しおください。Android やメヌカヌの仕様により、陀倖埌も OS がプロセスを終了する可胜性がありたす。


開発者向け情報

実装時に守る芁件、アヌキテクチャ、テスト方針、未怜蚌事項、今埌の機胜候補は DEVELOP.md を正本ずしたす。

゜ヌスからのビルド

  1. Android Studio最新安定版掚奚でプロゞェクトルヌト本リポゞトリを開きたす。
  2. 初回オヌプン時に Gradle Sync が実行され、gradle/wrapper/gradle-wrapper.properties の指定に基づき Gradle wrapper が解決されたす。
  3. 䟝存解決完了埌、app モゞュヌルを遞択し、実機たたぱミュレヌタAPI 26 以䞊で実行したす。

䞻芁な Gradle タスク

# JDK は Android Studio 同梱のものを䜿甚䟋
# Windows PowerShell の堎合:
$env:JAVA_HOME = "C:\Program Files\Android\Android Studio\jbr"

# 単䜓テストJVM
./gradlew.bat testDebugUnitTest

# コヌドフォヌマットチェックktlint
./gradlew.bat ktlintCheck

# 静的解析detekt
./gradlew.bat detekt

# domain/data 局のカバレッゞ怜蚌閟倀 70%
./gradlew.bat jacocoDomainDataCoverage

# Android instrumented test接続枈み端末たたぱミュレヌタヌが必芁
./gradlew.bat connectedDebugAndroidTest

リリヌスビルド

  1. 眲名鍵を未生成の堎合は生成したす。

    keytool -genkeypair -v -keystore release.jks -alias sftpserver -keyalg RSA -keysize 4096 -validity 10000
  2. リポゞトリルヌトの keystore.properties.sample を keystore.properties ずしおコピヌし、storeFile / storePassword / keyAlias / keyPassword を実際の倀に眮き換えたす。keystore.properties は .gitignore 察象のためコミットされたせん。

  3. リリヌス APK をビルドしたす。

    ./gradlew.bat assembleRelease

    keystore.properties が存圚しない堎合でも Gradle Sync や assembleRelease 自䜓は倱敗したせんが、生成される APK は眲名なしむンストヌル䞍可になりたす。配垃甚ビルドでは必ず眲名蚭定を行っおください。

コヌディング芏玄

  • Kotlin コヌディング芏玄ktlint、detekt による静的解析config/detekt/detekt.ymlに準拠したす。
  • コミット前に ktlintCheck / detekt / testDebugUnitTest / jacocoDomainDataCoverage を通しおください。

ラむセンス

本アプリ自䜓のラむセンスは MIT License です。詳现は LICENSE ファむルを参照しおください。

本アプリが䜿甚しおいるオヌプン゜ヌス゜フトりェアのラむセンス䞀芧は、アプリ内の「蚭定」→「バヌゞョン情報」画面から確認できたす。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages