さてさて、FreeBSDでOkaConsole Quadを使えるようにした でシリアルポートが使えるようになったので、Raspberry Pi 3B+をターミナルサーバにしようと思う。
ハンドブックとか見てみるとtipってのをうまく使うといけるっぽい。
ということは
- 特定ユーザでログインしたときにtipが実行されるようにする
/etc/remote
で4つのポートを利用可能にする
で大丈夫そう。
ユーザの追加
ではサクッと。 adduser
コマンドで「okaconsole」ユーザを作ってやる。 /dev/cuaU*
の所有権見たらdialerグループでの読み書きが可能になっているので、dialerグループに所属させる。
# adduser Username: okaconsole Full name: Uid (Leave empty for default): Login group [okaconsole]: dialer Login group is dialer. Invite okaconsole into other groups? []: Login class [default]: Shell (sh csh tcsh zsh rzsh git-shell bash rbash nologin) [sh]: bash Home directory [/home/okaconsole]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: no Lock out the account after creation? [no]: Username : okaconsole Password : <disabled> Full Name : Uid : 1002 Class : Groups : dialer Home : /home/okaconsole Home Mode : Shell : /usr/local/bin/bash Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (okaconsole) to the user database. Add another user? (yes/no): no Goodbye! #
SSH鍵の作成
リモートからの接続でパスワード聞かれても面倒だし、ローカルでしか使わないのもあるのでパスフレーズなしの公開鍵を作ってやる。
# su - okaconsole The default editor in FreeBSD is vi, which is efficient to use when you have learned it, but somewhat user-unfriendly. To use ee (an easier but less powerful editor) instead, set the environment variable EDITOR to /usr/bin/ee [okaconsole@pi-freebsd ~]$ ssh-keygen -t rsa -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/home/okaconsole/.ssh/id_rsa): /home/okaconsole/.ssh/pibsd-okaconsole Created directory '/home/okaconsole/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/okaconsole/.ssh/pibsd-okaconsole. Your public key has been saved in /home/okaconsole/.ssh/pibsd-okaconsole.pub. The key fingerprint is: SHA256:J7o35TOFrWLZUYKpbf9YU62iVNzHyHLnw2Brk4dXD3M okaconsole@pi-freebsd The key's randomart image is: +---[RSA 2048]----+ | | | | | o | | o ...o + | | oS .=+oO E| | ..oo+.++*Oo| | .. *.++*.=o| | .*.B+.o+ .| | .o oo+. | +----[SHA256]-----+ [okaconsole@pi-freebsd ~/.ssh]$ cp pibsd-okaconsole.pub authorized_keys
で、ここで作成した秘密鍵( pibsd-okaconsole
)を使いたいマシンに持ってきておく。
/etc/remote の確認
/etc/remote
に必要な定義があることを確認。ついでに検証環境ではボーレートを115200bpsにしてるのでそのへんのお手入れも。
編集後はこんな感じ。
$ grep cuaU /etc/remote ucom1:dv=/dev/cuaU0:br#115200:pa=none: ucom2:dv=/dev/cuaU1:br#115200:pa=none: ucom3:dv=/dev/cuaU2:br#115200:pa=none: ucom4:dv=/dev/cuaU3:br#115200:pa=none: #ucom1:dv=/dev/cuaU0:br#9600:pa=none: #ucom2:dv=/dev/cuaU1:br#9600:pa=none: #ucom3:dv=/dev/cuaU2:br#9600:pa=none: #ucom4:dv=/dev/cuaU3:br#9600:pa=none: ucom5:dv=/dev/cuaU4:br#9600:pa=none: ucom6:dv=/dev/cuaU5:br#9600:pa=none: ucom7:dv=/dev/cuaU6:br#9600:pa=none: ucom8:dv=/dev/cuaU7:br#9600:pa=none:
ログイン時にtipを自動実行
リモートから okaconsole ユーザでログインしたときに簡単なメニューを出して、目的のポートに接続できるように ~/.bashrc
を作成。一応変な入力は弾くように。
$ cat > ~/.bashrc clear echo "1: Okaconsole Quad Port#1(Catalyst 3560v2#1)" echo "2: Okaconsole Quad Port#2(Catalyst 3560v2#2)" echo "3: Okaconsole Quad Port#3(Catalyst 3560 #1)" echo "4: Okaconsole Quad Port#4(Catalyst 3560 #2)" echo "" echo "Which port?(1/2/3/4):" read PORT # 入力がなかったらやり直し if [ -z ${PORT} ]; then echo "No input, Push any key:" read . ~/.bashrc fi # 入力が数値じゃなかったらやり直し expr ${PORT} + 0 > /dev/null 2>&1 if [ $? -eq 1 -o $? -eq 2 ]; then echo "Not a Number! Push any key:" read . ~/.bashrc fi # 範囲外の数値だったらやり直し if [ ${PORT} -lt 1 -o ${PORT} -gt 4 ]; then echo "Invalid number! Push any key:" read . ~/.bashrc fi tip ucom${PORT}
ここでちょっとハマったのが .profile
。.bashrc
が実行されないと思ったら ~/.profile
に ~/.bashrc
を読み込む定義がなかった。ので、 ~/.profile
の最後に以下のブロックを追記しといた。
$ tail -n 5 ~/.profile # Load ~/.bashrc if [ -f ~/.bashrc ]; then . ~/.bashrc fi
結果
これで、以下のようにして接続すると
$ ssh -i pibsd-okaconsole okaconsole@{ラズパイのIPアドレス}
こんなシンプルな画面が出て
1: Okaconsole Quad Port#1(Catalyst 3560v2#1) 2: Okaconsole Quad Port#2(Catalyst 3560v2#2) 3: Okaconsole Quad Port#3(Catalyst 3560 #1) 4: Okaconsole Quad Port#4(Catalyst 3560 #2) Which port?(1/2/3/4):
接続できる。ゴミが出てるけど…
Which port?(1/2/3/4): 1 can't open log file /var/log/aculog. connected $eueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueu ueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueue ^ueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueue ueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueueue ueueueueueueu % Invalid input detected at '^' marker. DSW1#
でもまぁなんとかなるかな。切断は ~.
で。
Tips
自分が行編集のキーコンビネーション(Ctrl-PとかCtrl-Aとか)をよく使うので、これも仕込んどいた。
$ cat > ~/.tiprc force=^ raisechar=^
コメント