moshについて
概要
- roamingとlocal echoを提供するソフトウェア
- roamingとは通信経路の切り替えに対応する
- local echoとは通信が安定しない環境などで結果を予測して表示する仕組み
- sshのUDPラッパー
- UDPのポートはレンジで60000-61000を使用する
- macOSのwcwidth関数の依存
- 一部の絵文字が表示されない問題と,幅が正しく表示されない問題がある
- vim, tmuxなどで表示が崩れる
- 一部の絵文字が表示されない問題と,幅が正しく表示されない問題がある
24 bit color(true color)に対応させる
- moshをパッケージからインストールするとtrue colorに対応しないことがある
- vimの色等で繊細な表現ができないなどのデメリットがある
github.com/mobile-shell/mosh
から直接ビルドすることで対応可能である
debian/ubuntuでbuildしてインストール
$ sudo apt remove mosh # もしaptでインストールされていたら外す
$ sudo apt install protobuf-compiler
$ cd ~/.opt
$ git clone https://github.com/mobile-shell/mosh.git
$ cd mosh
$ sh ./autogen.sh
$ ./configure
$ make -j 8
$ sudo make install
macOSでbuildしてインストール
protocolbufferのbuildとインストール
$ cd ~/.opt
$ git clone https://github.com/protocolbuffers/protobuf
$ cd protobuf
$ ./autogen.sh
$ ./configure
$ make -j 8
$ sudo make install
protocolbuffersのbrewでインストール
$ brew install protobuf
$ brew link protobuf
moshのbuildとインストール
$ cd ~/.opt
$ git clone https://github.com/mobile-shell/mosh.git
$ cd mosh
$ ./autogen.sh
$ ./configure # 2023-06にワークしない
$ ./configure CC=clang CXX=clang++ CXXFLAGS='-std=c++17' # 2023-06のアドホックな対応
$ make -j 8
$ sudo make install
使用法
最小の構成コマンド
$ mosh user@server
サーバの実行ファイルを指定する(osxをホストとするとき)
$ mosh user@server --server=BIN_PATH
BIN_PATH
は以下のケースが多い
$ mosh user@server --server=/usr/local/bin/mosh-server
プライベートキーを指定して接続
$ mosh --ssh="ssh -i KEY_PATH" user@server
moshクライアントの終了について
- サーバサイドに接続できなくなった時、moshクライアントは自動的に終了することはないので手動で終了する必要がある
ctrl+^
でモードに入って.(ピリオド)
で終了する事ができる
predictオプションについて
- 投機的なローカルエコーを制御するオプション
- キーを打ってから戻りが遅い場合、とりあえず投機的な結果から画面に表示するなど、遅延を軽減する効果がある
-aオプション
- (moshが自信があれば)常に投機的に予測する
-nオプション
- 投機的なローカルエコーを使用しない
トラブルシューティング
macOSに接続する際に、mosh-serverが見つからないと出る
- 原因
- sshdの標準PATHに
/usr/local/bin
が含まれていないことが原因
- sshdの標準PATHに
- 対応
- /ssh/の”sshした際のサーバサイドの環境変数について”を参照して、PATHを追加する
macOSから他のデバイスにmosh接続したときに一部の絵文字が表示されない
- 原因
- appleの
wcwidth
というCライブラリに依存しており、このライブラリで表示可能かを判定している wcwidth
が古く、最新の絵文字に追いつけていないのが原因
- appleの
- 対応
- バージョンアップ待ち
- sshを使うことで回避できる
- 参考
moshで接続したときにターミナル上の文字のコピーアンドペーストに改行が含まれる
- 原因
- 不明
- 対応
- sshを使うことで回避できる