Ubuntu 21.10のGSConnectでAndroid11のマウントができない件

UbuntuとAndroidを使っているならGSConnectで連携するのがとっても便利。というのはUbuntu使いの常識。

ただ、(おそらく)Android側のセキュリティ的なアレでmountが機能しなくなった。

でも大丈夫。sshfsが使えちゃう。今回はそんなお話。

Andoird11はGSConnectでmountできない様だ

追伸-

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}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です