それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ブラウザでリモートのターミナルを起動できるShell in A box がiOSから使うのに便利

Shell in a Box が便利だった

Macからはターミナルで解決するし、特に生活に不便を感じないんだが、ちょっとしたファイルサーバーのメンテンス(ファイル消す)とかでMac起動するのもめんどくさい

iOS Safariから使えるターミナル

各種ターミナルのアプリがあるんだが、秘密鍵のインストールとかめんどくさいし。

f:id:takuya_1st:20180703165322p:plain

インストール

sudo apt install shellinabox

しかも手軽にインストールができる。

起動

sudo service shellinabox start

アクセス

ローカルアドレスの :4200 にhttpsでアクセスする

open https://127.0.0.1:4200

これでOK。あとはログイン画面が出てくる

アクセスする

f:id:takuya_1st:20180703165920p:plain

https でアクセスする必要がある。

基本的な設定

/etc/default/shellinabox 設定ファイル

基本的な設定ファイルは debianの場合は次の場所に保存されていました。

# Should shellinaboxd start automatically                                          
SHELLINABOX_DAEMON_START=1                                                         
                                                                                   
# TCP port that shellinboxd's webserver listens on                                 
SHELLINABOX_PORT=4200                                                              
                                                                                   
# Parameters that are managed by the system and usually should not need            
# changing:                                                                        
# SHELLINABOX_DATADIR=/var/lib/shellinabox                                         
# SHELLINABOX_USER=shellinabox                                                     
# SHELLINABOX_GROUP=shellinabox                                                    
                                                                                   
# Any optional arguments (e.g. extra service definitions).  Make sure              
# that that argument is quoted.                                                    
#                                                                                  
#   Beeps are disabled because of reports of the VLC plugin crashing               
#   Firefox on Linux/x86_64.                                                       
SHELLINABOX_ARGS="--no-beep"          

ローカルホストに限定する

デフォルトでは 0.0.0.0 を listen してしまうので、localhsot に限定する。

SHELLINABOX_ARGS="--no-beep --localhost-only"

nginx と組み合わせる。

http 通信なので、 ssl とかめんどくさいことは nginx にリバプロさせる。

 location /my.shell/ {                                                  
    proxy_pass https://localhost:4200//;                                           
  }          

これで、nginx と組み合わせる事ができる。あと外向きにCertbot でLetsEncyptすれば、SSL問題なく使えそうだ。

nginx に認証を掛ける。

nginx には auth_request ディレクティブがあるので、これを使って認証を掛けることにする。

 location /my.shell/ {                                                  
    auth_request /check_oauth.php;                                                  
    error_page 401 =302  https://$host/oauth.php?redirect_to=$uri&$query_string;   
    proxy_pass https://localhost:4200//;                                           

うん、これで安心

auth_request については、以前書きました。→http://takuya-1st.hatenablog.jp/entry/2018/05/08/182127

便利な点

docker のコンテナにssh 入れなくてもぱぱっと状況を見ることできそう。

iOS から使うと便利。

ターミナルをインストールしなくてブラウザで解決するね。

iOS はアプリを入れられないから、足りない機能やちょっとしたツールは、ブラウザで解決する事が多いしこれで安心。

f:id:takuya_1st:20180703170830j:plain:w200

難点

使ってみてわかった問題。

ログインがローカル経由になるのでリモートIPや接続ログが全部リンクローカルアドレスになる。

転送と描画に時間がかかるので、巨大なファイルをcat すると表示終了までに時間がかかりすぎてヤバイ。

公開鍵認証を使うのが大変。踏み台のDockerに入れるべきかもしれない。

追記

プロセスのfork と exec がどうなってるのかなと、ps叩いてみたら、/usr/bin/shellinaboxd が *:4200 で待ち受けて、root で login を呼び出してて、pts/0 を作ってる

ssh とはちょっと違うのでWEBブラウザSSHというにはちょっと違うかな。

shellin+ 21095  0.0  0.0  37724  5472 ?        Ss   17:02   0:00 /usr/bin/shellinaboxd -q ...
shellin+ 21096  0.0  0.0  37184  2124 ?        S    17:02   0:00  \_ /usr/bin/shellinaboxd -q ...
root     23435  0.0  0.0  74232  3484 pts/0    Ss   18:12   0:00      \_ login -p -h 127.0.0.1                                                                                                                                            
takuya   23444  0.1  0.0  26504 11024 pts/0    S    18:12   0:00          \_ -bash                                                                                                                                                        
takuya   23803  0.0  0.0  38196  3780 pts/0    R+   18:13   0:00              \_ ps auxf                                                                                                                                                  

右クリックメニューで、色を変える

f:id:takuya_1st:20211124033249p:plain

右クリックメニューでキーボードを有効にする

f:id:takuya_1st:20211124033221p:plain

キーボードを常にONにできたらiOSで優秀なターミナルとして動作可能なんだけど。キーボードを常にONにする方法がわからないですね。

iOSの場合は、ランドスケープ(横向き)のすると、キーボードを使いやすい。

f:id:takuya_1st:20211124034740p:plain

2021-11-24 追記

キーボードとカラーについて追記

参考資料

https://www.smarthomebeginner.com/increase-shellinabox-security/