Bhyve serial terminal server

Paul Vixie paul at redbarn.org
Wed Jul 3 22:40:06 UTC 2019


On Wednesday, 3 July 2019 19:45:45 UTC Eric van Gyzen wrote:
> I would like to expose bhyve serial consoles over TCP sockets, like many
> terminal servers do for hardware serial ports.  Is there any open-source
> software to do this?

as i said, "pkg install rtty" was created for this purpose and it's what i 
use. but then, i wrote it, in 1991 or so, while employed at d|i|g|i|t|a|l who 
gave me a room full of vaxes but no way to keep track of them all. a demo:

> [mm1.redbarn:amd64] console
> family          guests          pbx             sleipnir        util
> [mm1.redbarn:amd64] console pbx
> connected
> (use (CR)~? for minimal help; also (CR)~q? and (CR)~s?)
> [authorized]
> [vixie@/dev/pts/0 connected]
> FreeBSD/amd64 (pbx.redbarn.org) (ttyu0)
> login: ~.
> [rtty exiting]
> [mm1.redbarn:amd64] ls -l /usr/local/rtty/dev
> total 3
> lrwxr-xr-x  1 root  wheel  11 May 18  2014 family@ -> /dev/nmdm2A
> lrwxr-xr-x  1 root  wheel  11 May 17  2014 guests@ -> /dev/nmdm0A
> lrwxr-xr-x  1 root  wheel  11 Nov 16  2014 pbx@ -> /dev/nmdm5A
> lrwxr-xr-x  1 root  wheel  11 Jun  1  2014 sleipnir@ -> /dev/nmdm3A
> lrwxr-xr-x  1 root  wheel  11 May 18  2014 util@ -> /dev/nmdm1A
> [mm1.redbarn:amd64] ps auxwww|grep ttysrv|head -1
> root    1578    0.0  0.0    6440    2088  -  I    17Jan19       0:00.03
> /usr/local/rtty/bin/ttysrv -b 9600 -w 8 -p none -t
> /usr/local/rtty/dev/family -s /usr/local/rtty/sock/family -l
> /usr/local/rtty/log/family -i /usr/local/rtty/pid/family root    1617   

and:

> [mm1.redbarn:amd64] tail /usr/local/rtty/log/pbx
> Jul  3 22:04:01 pbx syslogd: last message repeated 1 times
> FreeBSD/amd64 (pbx.redbarn.org) (ttyu0)
> login: ~.
> [mm1.redbarn:amd64]

however, i'd like to add additional detail, below:

> I found ports/comms/conserver-com, which is /almost/ what I want.  I
> want the client to simply connect to a TCP port and get direct,
> immediate access to the guest console associated with that port.  Can
> conserver do this?  We have lots of infrastructure and tooling built
> around this model, and I'd rather avoid modifying it to support the
> conserver model.

as hinted by the name, rtty has a tcp listener/connection model in addition to 
the more common unix domain socket connection model i normally use:

> [mm1.redbarn:amd64] ls -l /usr/local/rtty/sock
> total 3
> srw-rw----  1 root  wheel     0 Jan 17 15:06 family=
> srw-rw----  1 root  wheel     0 Jan 17 15:06 guests=
> srw-rw----  1 root  wheel     0 Jan 17 15:06 pbx=
> srw-rw----  1 root  sleipnir  0 Jan 17 15:06 sleipnir=
> srw-rw----  1 root  wheel     0 Jan 17 15:06 util=

however, the protocol is not "direct" or "immediate", and indeed cannot be so, 
because i have to be able to encode things like BREAK and seeing or changing 
the baud rate and word size and so on. i should have used telnet encoding, but 
that didn't have a location broker and i didn't want to have to assign or 
memorize port numbers, and the only authentication telnet had when i began 
this work was in-band or kerberos, neither of which fit my needs.

my tcp listener and unix domain listener speak the same (stream) protocol.

see https://github.com/gitGNU/gnu_rtty/blob/master/ttyprot.h for details.

you could pretty easily use the supplied "rtty" client program for management, 
but, there is no authentication or encryption. when i want to give someone 
remote access to a guest VM, i do it with ssh, and i use rtty as their login 
shell. that's when unix domain sockets and their file modes and group and user 
ownership become important.

-- 
Paul




More information about the freebsd-virtualization mailing list