UbuntuとAndroidを使っているならGSConnectで連携するのがとっても便利。というのはUbuntu使いの常識。
ただ、(おそらく)Android側のセキュリティ的なアレでmountが機能しなくなった。
でも大丈夫。sshfsが使えちゃう。今回はそんなお話。
追伸-
Ubuntu 22.04にしたらsshfsもできなくなりました。DSAが使えなくなりRSAのみになった模様。
sshfs(OpenSSH)とAndroid側のKDEConnectの相性が悪いらしく、Ubuntu 22.04ではRSAでもsshfsが使えない。
事前準備
Ubuntu側
GSConnectをインストールしておきます。ブラウザで以下のサイトに行って「ON」にします。
https://extensions.gnome.org/extension/1319/gsconnect/
sshfsをインストールしていない場合はインストールしておきます。
$ sudo apt install sshfs
また、マウントポイントも作っておきます
$ mkdir ${HOME}/mnt
Android側
Google PlayからKDEConnectをインストールしておきます
インストールしたら起動して左上のメニューから「新しいデバイスをペアリング」を選択します。GSConnectをインストールしたPCが表示されるので接続します。おそらくデフォルトのフォルダを指定するように案内されるので、Ubuntuとファイルの送受信で使用するフォルダを指定します。
Ubuntu 21.10の場合
UbuntuからsshfsでAndroidのディレクトリをマウントする
まずは結論から。Ubuntuで以下のコマンドを実行するとマウントできます。
$ PORT=1739 $ PEM=${HOME}/.config/kdeconnect/privateKey.pem ←固定 $ ANDROID_IP=192.168.0.10 ← AndroidのIPアドレス $ ANDROID_MP=/ ← AndroidのKDEConnectで設定しているディレクトリ $ UBUNTU_MP=$HOME/mnt ← ここにAndroidをマウントする。先に作っておくこと。 $ sshfs -o rw,nosuid,nodev,identityfile=${PEM},port=${PORT} \ kdeconnect@${ANDROID_IP}:${ANDROID_MP} ${UBUNTU_MP}
アンマウントするときは以下のコマンドを使います
$ fusermount -u ${UBUNTU_MP}
説明
他のLinuxホストのディレクトリをローカルにマウントする方法にはsambaなどもありますが、Andoirdはsambaに対応していないのでsshfsを使います。Linuxサーバを扱っている人なら使い慣れているはず。
PAMはSSHで暗号化に使用する鍵です。自分の公開鍵を相手(Andoird)に送り、暗号化した通信路を作ります。
ANDROID_IPとANDROID_MPは文字通りAndroid側のIPアドレスとマウントするディレクトリです。IPアドレスはAndroidの「設定」 > 「デバイス情報」で確認できます。マウントするディレクトリは"/"にしておけばAndroidにKDEConnectをインストールした際に設定したはずのディレクトリが選択されます。KDEConnectの(右上の設定リスト) > 「プラグイン設定」 > 「ファイルシステムの参照」に任意のディレクトリを登録しておけば、マウントした直下にそのディレクトリが見えます。
UBUNTU_MPはUbntu側のマウントポイントです。ANDROID_MPがここにマウントされます。マウントする前に作成しておく必要があり、なおかつ空ディレクトリである必要があります。
マウントできているか確認するにはdfコマンドを使います
$ df | grep kde kdeconnect@:/ <容量> <使用済み> <空き> <使用率> <マウントポイント>
Ubuntu 22.04の場合
Ubuntu 22.04からは$HOME/.ssh/configファイルを使います。(Ubuntu 21.10でもできます。)
RSAを使うためRSAの公開鍵も作っておきます。
sshfsとKDEConnectのバグが修正されるまでこの方法は使えません。パスワードを聞かれるはずです。どうやらセキュリティ的な観点でAndroidにsshを許可するのは良くないという判断があるようです。
RSAの秘密鍵・公開鍵を作る
$ ssh-keygen -t rsa -b 4096 Enter file in which to save the key ($HOME/.ssh/id_rsa): ← そのままEnter Enter passphrase (empty for no passphrase): ← そのままEnter Enter same passphrase again: ← そのままEnter $ ls $HOME/.ssh/ id_rsa(秘密鍵)とid_rsa.pub(公開鍵)が作成されているはず
$HOME/.ssh/configを作る
長ったらしいsshfsのオプションを記載しておくファイルです。
vi $HOME/.ssh/configで編集します
Host MyPhone ← この名前に下の設定をリンクさせる Hostname 192.168.0.15 User kdeconnect Port 1740 IdentityFile $HOME/.ssh/config HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa StrictHostKeyChecking ask TCPKeepAlive yes LogLevel DEBUG2
sshfsでマウントする
$ ANDROID_MP=/ ← AndroidのKDEConnectで設定しているディレクトリ $ UBUNTU_MP=$HOME/mnt ← ここにAndroidをマウントする。先に作っておくこと。 $ sshfs -o rw,nosuid,nodev MyPhone:${ANDROID_MP} ${UBUNTU_MP}