ssh で termux proot ubuntu にログインして Cursor で編集する場合の問題と解決策
sshdをubuntu / termux nativeどちらの環境でホストするか?
答え:両方建てとけばいいじゃん
sshdをubuntu環境で実行した場合
sshdをUbuntuで実行すると、remoteからのssh直後の環境がubuntuになります
sshdをubuntu環境で実行することにより、VS CodeやCursorが接続できるようになります
VS Codeは、sshログイン直後の環境でVS Code サーバーのプロセス起動を試みるからです
そのかわり、そのセッションではproot-distro loginが使用されていないため、proot ubuntuのhomeディレクトリなどが正しく設定されていません
login時に通常実行されるディレクトリのバインド処理が行われていないと思われます
proot-distro loginを追加で使用してもfatalエラーになります
sshdをtermuxで実行した場合
まずtermuxからログインして次にproot-distro loginを実行すれば、一貫性のあるファイルシステム内で作業できます
しかしログイン直後の環境がubuntuではないので、VS Code等の実行はできません
code:.bash_profile.sh
# ~/.bash_profile (non-root ユーザー)
# ---- guard: Android(Termux) 以外は何もしない
"$OSTYPE" != "linux-android" && return
# ---- 明示的に自動ログインをバイパスさせたいとき用のフラグ
if -n "$SKIP_PD_AUTOSTART" ; then
return
fi
# ---- 対話シェル/ローカル端末のみで自動起動(SSH 経由では走らせない)
# $- に i が含まれる=インタラクティブ、SSH 経由は SSH_CONNECTION が空でない
if "$-" == *i* && -z "$SSH_CONNECTION" ; then
# 端末用 sshd
pgrep -f "sshd -D -p 8022" >/dev/null || (sshd -D -p 8022 &)
# Ubuntu 側: VS Code 等用の sshd
pgrep -f "sshd -D -p 8023" >/dev/null || \
(proot-distro login ubuntu -- sshd -D -p 8023 &)
fi
# ---- 既定で Ubuntu にログイン
proot-distro login --user (ユーザー名) ubuntu
# exit 0
手元のPCの.ssh/configに、termuxに対応するconfigを書いておきましょう
./.ssh/termux(.pub) に鍵を作成したとします
code:ssh_config
Host termux
HostName 192.168.??
User ??
Port 8022
IdentityFile ~/.ssh/termux
Host termux:ubuntu
HostName 192.168.??
User ??
Port 8023
IdentityFile ~/.ssh/termux
これで、Cursorからは termux:ubuntuにssh 接続すればよいことになりました