BebboSSH AROS 1.0.5: SSH on Raspberry Pi too

On this page

A Raspberry Pi running AROS does not automatically become easy to manage from a PC. Copying an archive, checking a version or running a command without returning to the Pi’s keyboard needs a connection that holds up beyond the first demonstration. BebboSSH AROS 1.0.5 adds the aarch64 package and addresses exactly those details: host-key confirmation, console keys and clean server shutdown.

The operating system matters here: these binaries are for AROS on the Raspberry Pi, not Raspberry Pi OS or an ARM Linux distribution. The original project is Stefan “Bebbo” Franke’s BebboSSH; Michele Dipace maintains the AROS fork. Upstream version 1.45 and the port’s 1.0.5 numbering are not two updates in the same package series.

The Pi release, without mixing up the three packages

The source is shared, but the kits are not interchangeable. The aarch64 build uses the aarch64-aros crosstools and the raspi-aarch64 port’s sysroot. The documented hardware validation concerns a Raspberry Pi 400, with the September 12, 2026 AROS build, Ethernet and DHCP. Having a 64-bit ARM CPU is not sufficient to declare another board supported.

Kit Target and declared status Remote command execution
i386, alt-abiv0 32-bit AROS One; stable in 1.0.5 ssh host command uses a child task
x86_64, mincrt 64-bit AROS; stable in 1.0.5 Synchronous: a long command keeps the daemon busy
aarch64, raspi-aarch64 First AROS Pi release; validated on the Pi 400 Follows the i386 path, with a child task for remote exec

Every kit contains four executables: bebbosshd accepts connections, bebbossh is the SSH client, bebboscp copies files and bebbosshkeygen generates Ed25519 keys. Cryptography is linked statically: the current AROS port does not require a separate libcryptossh.library, unlike other contexts in the Amiga upstream project.

The 1.0.5 fixes matter in everyday use

The client finally waits for the host-key answer

On the first connection, bebbossh and bebboscp asked whether to accept the server’s key, but could read the command line left in the input buffer by RunCommand() as the answer. The result was failed to verify the host before the user had a chance to respond. Version 1.0.5 clears that initial input and allows time for an answer.

This does not remove the security check: it fixes the interaction. The key still needs verification; an unexpected change on a known host should not be accepted blindly.

Cursor keys and characters should not fight over one packet

In the daemon’s shell, Shift+Left could print [1;2D instead of moving the cursor. If a cursor sequence and the following character arrived in the same packet, that character could also be lost. The parser now preserves both. That matters when correcting a path or pasting text, even if SSH login itself works perfectly.

The aarch64 client also fixes console detection: the code distinguishes the C library’s FILE from the AmigaDOS handle returned by Input(). This avoids treating cursor keys as raw input in the documented case.

On aarch64, shutting down the server is part of the port

The release fixes timer-request and keyboard-resource management. On aarch64, some calls bound to amiga.lib allocations while cleanup followed a different path: the daemon could work and then crash on exit. Matching Exec calls align resource creation and release. Starting, interrupting and restarting the service is therefore a practical check, not a packaging footnote.

What was validated, and on which machine

The aarch64 release checklist records the five crypto self-tests, 100 consecutive logins, SCP/SFTP transfers in both directions and stress with no delay between connections on the Pi 400: 20 iterations and 80 transfers of up to 1 MiB. It also documents byte-for-byte comparisons, overwriting with a shorter file, two simultaneous daemons, native clients and restarting after Break.

These are results recorded by the project, not benchmarks run while preparing this article. They do not predict network throughput on every Pi. The older 68k processor measurements in the upstream README are not measurements of this ARM port either.

Hardware and VM results need separating: the aarch64 notes report very slow reception and a failed upload with QEMU raspi3b and usb-net, while the same transfers pass on the Pi 400. Using that VM result to judge the real board’s networking would be misleading.

Diagram of a PC SSH client connecting to the BebboSSH daemon on AROS for remote commands and file transfers
Operational diagram, not a test screenshot: the PC reaches the AROS daemon, which handles commands and files. Exec limits depend on the target.

First installation on the Raspberry Pi

Download the aarch64 kit, extract it and copy the directory to the AROS volume, for example SYS:BebboSSH. Configure AROSTCP networking first. From the AROS Shell:

cd SYS:BebboSSH
copy sshd_config.example sshd_config
copy passwd.example passwd
ed passwd
ed sshd_config
bebbosshkeygen -f ssh_host_ed25519_key
stack 262144
bebbosshd

Also check the initial directory in sshd_config: the example contains HomeDir DH0:. If you use SYS: on the Pi, choose an existing path, such as HomeDir SYS:BebboSSH. Before starting the daemon, replace the demonstration credential in passwd with your own username and password. The bootstrap format is one username password pair per line. The host key identifies this installation: generate it at first setup, protect it and retain it during upgrades rather than sharing it between machines.

The examples use PROGDIR: paths. Keep bebbosshd, sshd_config, passwd and the key in the same directory. Copying the daemon to C: without adjusting those paths makes it look for its configuration there too. The clients can be copied to C: for convenient access.

On the Pi’s FAT SYS: volume, protect may report an error: the release notes explain that the binaries remain executable. For autostart, the checklist provides scripts and requires AROSTCP at boot plus a short delay before the daemon. Start manually first, then move to autostart once networking and login work.

From the PC: check a version and move a file

From a PC with OpenSSH, try these commands, replacing AROS_IP with the Pi’s address and user with the configured account:

ssh user@AROS_IP Version
scp archive.lha user@AROS_IP:SYS:BebboSSH/
sftp user@AROS_IP

Version is a useful first short command; copying the archive checks a writable path. There is no need to start with a full-screen editor session. You can also save the output on the PC:

ssh user@AROS_IP Version > aros-version.txt

That redirection runs in the PC’s shell. It is not equivalent to sending Version > file to AROS’s remote shell, which does not yet support such redirection. If the problem is a first connection from the native AROS client, try bebbossh user@host from its console instead: that is the path affected by the host-key prompt fix.

Limits worth knowing before using it for work

  • This is not a complete PTY shell. Simple commands work; stdin-driven programs and remote pipes or redirection are rejected with status 2.
  • A command typed in the interactive shell runs inside the daemon: other connections wait and Ctrl-C does not interrupt it. On i386 and aarch64, ssh host command exec uses a child task; on x86_64 it remains synchronous.
  • On i386 and aarch64, the 30-second timeout with status 124 does not kill the command: work may continue. Do not confuse it with successful cancellation.
  • On the Pi 400, tests report freezes with -v5 debug logging to a console during heavy transfers. Keep the default level and use debug for short diagnostics.
  • On x86_64, an unmounted volume can open a requester that blocks the daemon. Options for cd, SFTP timestamps and links are opt-in; their test coverage is not identical.
  • Preserving timestamps with OpenSSH put -p still has a limitation: a timestamp set before closing may be updated by AROS when the file closes.

Modern ciphers do not turn the underlying system into an isolated, audited Linux server. The porting notes also document limits in the x86_64/mincrt random generator, described as a best-effort mixer rather than a true CSPRNG. Start experimenting on a controlled network and do not treat the SSH name as a guarantee for the entire machine.

Version 1.0.5 downloads and the right sources

AROS target GitHub release Aminet package
i386, alt-abiv0 1.0.5 ZIP and tar.gz i386 LHA
x86_64, mincrt 1.0.5 ZIP and tar.gz x86_64 LHA
aarch64, Raspberry Pi 1.0.5 ZIP and tar.gz aarch64 LHA

The releases include checksums for verifying download integrity; all three public ZIPs match their declared values. All three Aminet package pages also list 1.0.5: they are not merely pointers to the original 68k package. The fork’s public repository is on GitHub. The licence is GPLv3 or later; upstream attribution and licence texts must stay with redistributions.

The development branch is already beyond those binaries

The October 13 commit adds protection for DOS packet logs without an associated shell channel: it avoids a null dereference before the logging level can filter the message. This is a later fix. The three public 1.0.5 tags point to commit 188e301, so that fix must not be attributed to the already downloadable 1.0.5 ZIPs.

That is the useful way to read this release: an actual ARM kit, small client defects removed and explicit operational boundaries. The first BebboSSH AROS article on RetroLab covers the port’s history and its place in the lab; the repository’s versioned instructions remain the reference for installation and building.

Sources and documentation

AUTHOR

IT specialist, developer and systems engineer with a long history across code, Linux servers, retrocomputers and e-learning platforms. On AndroidLab he brings a technical, pragmatic eye: less brochure smoke, more attention to infrastructure, usability, privacy, updates and the real consequences of manufacturers' choices.

Leave a Comment