ssheven - A modern SSH client for Mac OS 7/8/9.

Related tags

CLI retro68
Overview

ssheven box

ssheven

A modern SSH client for Mac OS 7/8/9.

Project status: as of 0.8.0 (see github releases), fairly secure and usable, but without a polished UX or all planned features. Versions prior to 1.0.0 should be considered alpha/beta quality.

ssheven screenshot

system requirements

  • CPU: Any PPC processor, or at least a 68030 (68040 strongly recommended).
  • RAM: 2MB.
  • Disk space: fits on a floppy.
  • System 7.1 or later. Versions below 7.5 require the Thread Manager extension.
  • Open Transport networking required, latest version possible highly recommended.

roadmap

0.9.0

  • basic scp file transfer
  • general code cleanup

1.0.0 (first "real" release)

  • configurable terminal string
  • configurable/auto-choosing SSH buffer size (improves feel for faster machines)
  • nicer error presentation for more failure cases
  • add known_hosts reset option
  • read Apple HIG and clean up UI/UX
  • all license info in an about box type thing
  • finish and upload papercraft box, floppy sticker artwork, icon/logo svg

known problems

  • drawing the screen is somewhat slow
  • input latency feels high because redrawing the screen is slow (along with all the encryption, which is also slow)
  • receiving a large amount of data may break the channel or cause lockups (e.g. cat /dev/zero)
  • non-US keyboard input may or may not have issues

possible upcoming features

  • more complete color support (currently uses the default Mac 8 color palette)
  • keyboard-interactive authentication

build

Uses Retro68 and cmake.

Requires mbedtls, libssh2, and libvterm, see my (cy384's) ports of those libraries for details. Note that you need to build/install each for both platforms (m68k and PPC).

To build a fat binary, edit build-ssheven.bash with the path to your Retro68 build, and then run it.

license

Licensed under the BSD 2 clause license, see LICENSE file.

Comments
  • Type 7 Error on Power Macintosh 6100/60 (System 7.6.1)

    Type 7 Error on Power Macintosh 6100/60 (System 7.6.1)

    I have a Power Macintosh 6100/60 running System 7.6.1. I can launch the PPC version of the application, and enter a password or key, but after that it rapidly displays a line of text which says "connecting endpoint ...done" and then crashes with the error "the application "unknown" has unexpectedly quit, because an error of type 7 occurred."'

    Putting in a bogus connection URL or port yields "connecting endpoint..." and the whole system locks up.

    I tried the 68k version instead (just to see if it worked as PPC supports most 68k apps) and it quit with an error of type 2 after entering the password.

    Any thoughts on how I can debug?

    bug 
    opened by frogsquire 27
  • can not be opened because an unexpected error occured

    can not be opened because an unexpected error occured

    System details

    Power Macintosh 7300 96MB of RAM System 7.5.5 Open Transport 1.1.1

    Issue

    Launching SSHEVEN-FAT produces the following error and immediately quits.

    The application "SSHEVEN-FAT" can not be opened because an unexpected error occured.

    bug 
    opened by lukecyca 10
  • Option+key combinations do not produce anything

    Option+key combinations do not produce anything

    On the Finnish keyboard option is required to access many common characters like |, $, [], etc. I am running ssheven under Mac OS 9 set to Finnish locale, and it appears to me that ssheven is ignoring these key combinations. Unsure if this is covered under "non-US keyboard input may or may not have issues" or not.

    bug 
    opened by nortti0 5
  • period symbol shown in password prompt

    period symbol shown in password prompt

    Hello,

    Discovered this by accident, but in SSHeven 0.8.0 prerelease, when I am connecting to a machine and enter a password that has a period (".") symbol in it, the period is shown instead of the typical bullet/circle symbol.

    I'm running 9.2.2 on a G3, VM is off. I haven't had a chance to test this on my 7.6.1/601 machine or elsewhere yet.

    Here is a screenshot with an example password that has a period in the 5th position: 2020-11-10_ssheven-pw-error

    Please let me know if you need anything else on this, and, thank you for your work on this project!

    opened by cory5412 3
  • Potential buffer over-read

    Potential buffer over-read

    I believe the following lines allow for a buffer over-read (however remote the possibility):

    https://github.com/cy384/ssheven/blob/d8753b3676a63b8763a5480817eaad5ce28e4735/ssheven.c#L35 https://github.com/cy384/ssheven/blob/d8753b3676a63b8763a5480817eaad5ce28e4735/ssheven.c#L39

    The arrays are length 255 rather than 256; in both cases, I think it's possible for the array to end up being indexed with [255], which over-reads the buffer.

    When reading from ascii_to_control_code, you might send garbage across the wire: https://github.com/cy384/ssheven/blob/d8753b3676a63b8763a5480817eaad5ce28e4735/ssheven.c#L576

    For keycode_to_ascii, the index to the above read might also end up being garbage: https://github.com/cy384/ssheven/blob/d8753b3676a63b8763a5480817eaad5ce28e4735/ssheven.c#L571

    If this looks like a problem, you'll also want to update this loop:

    https://github.com/cy384/ssheven/blob/d8753b3676a63b8763a5480817eaad5ce28e4735/ssheven.c#L50

    to:

    	for (uint16_t i = 0; i < 256; i++)
    

    I don't know that any Mac keyboard would even have a key code on it equal to 0xff, nor do I know if the translation to "ASCII" would ever give 0xff. This latter seems like it could be possible if there is a layout with a ˇ key.

    opened by jonirons 2
  • channel read error: LIBSSL2_ERROR_ENCRYPT

    channel read error: LIBSSL2_ERROR_ENCRYPT

    Realize it's still a prototype just wanted to document some behaviors I'm seeing. :) Noticed that when network access is unavailable or if a machine goes to sleep, the client crashes and the client window is flooded by this error: "channel read error: LIBSSL2_ERROR_ENCRYPT".

    opened by garethgreenaway 2
  • ssheven 0.8.5 locks up on unsuccessful connection

    ssheven 0.8.5 locks up on unsuccessful connection

    If I attempt to ssh to a host that cannot be resolved (eg. is offline or incorrect hostname) the error "Connecting endpoint... OTConnect(ssh_con.endpoint, &sndCall, nil) failed" appears in the console. The program then immediately locks up and needs to be Force Quit using Cmd + Opt + Esc.

    Using on an iMac G3 running Mac OS 9.2.2. Can't screenshot the above error as the system is unresponsive until ssheven is force quit anyway.

    I am having no issues as long as the remote host being connected to responds.

    opened by Jakeysp 1
  • Ctrl-a does not work, Ctrl-Shift-a does

    Ctrl-a does not work, Ctrl-Shift-a does

    Pressing Ctrl and the A key does not produce the byte 0x01, but pressing Ctrl, Shift and the A key does. I am not exactly sure what Ctrl-A produces by itself, because in shell it doesn't seem to do anything but in Irssi it switches windows. I am using Finnish-language Mac OS 9.2 with Finnish keyboard map on a PowerPC G3 system, running both version 0.8.9 and the one-off version created to a keyboard layout issue I had.

    bug 
    opened by nortti0 1
  • Key login not working

    Key login not working

    Thanks for making this cool project!

    Note, the keypair work , I've tested on other machines. I downloaded id-rsa and id-rsa.pub from my linux computer, and placed them on the OS9.2 desktop, then provided the .pub file when asked for "public key". I am then asked for the password, there is no password, so I press enter.

    ssheven then tells that login failed, the message is:

    Connecting endpoint... done. Beginning SSH session handshake... done. (15 ticks) Authenticating... failed! Username/public key combination invalid!

    I captured the attached log from SSHD Did I do something wrong?

    Best Regards

    21:19:24 sshd[1239115]: debug1: Forked child 1239244. 21:19:24 sshd[1239244]: debug1: Set /proc/self/oom_score_adj to 0 21:19:24 sshd[1239244]: debug1: rexec start in 5 out 5 newsock 5 pipe 7 sock 8 21:19:24 sshd[1239244]: debug1: inetd sockets after dupping: 4, 4 21:19:24 sshd[1239244]: Connection from 192.168.40.149 port 49164 on 192.168.40.118 port 22 rdomain "" 21:19:24 sshd[1239244]: debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5 21:19:24 sshd[1239244]: debug1: Remote protocol version 2.0, remote software version libssh2_1.9.0_DEV 21:19:24 sshd[1239244]: debug1: no match: libssh2_1.9.0_DEV 21:19:24 sshd[1239244]: debug1: permanently_set_uid: 122/65534 [preauth] 21:19:24 sshd[1239244]: debug1: list_hostkey_types: rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256,ssh-ed25519 [preauth] 21:19:24 sshd[1239244]: debug1: SSH2_MSG_KEXINIT sent [preauth] 21:19:24 sshd[1239244]: debug1: SSH2_MSG_KEXINIT received [preauth] 21:19:24 sshd[1239244]: debug1: kex: algorithm: ecdh-sha2-nistp256 [preauth] 21:19:24 sshd[1239244]: debug1: kex: host key algorithm: ecdsa-sha2-nistp256 [preauth] 21:19:24 sshd[1239244]: debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha2-256 compression: none [preauth] 21:19:24 sshd[1239244]: debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha2-256 compression: none [preauth] 21:19:24 sshd[1239244]: debug1: expecting SSH2_MSG_KEX_ECDH_INIT [preauth] 21:19:24 sshd[1239244]: debug1: rekey out after 4294967296 blocks [preauth] 21:19:24 sshd[1239244]: debug1: SSH2_MSG_NEWKEYS sent [preauth] 21:19:24 sshd[1239244]: debug1: expecting SSH2_MSG_NEWKEYS [preauth] 21:19:24 sshd[1239244]: debug1: SSH2_MSG_NEWKEYS received [preauth] 21:19:24 sshd[1239244]: debug1: rekey in after 4294967296 blocks [preauth] 21:19:24 sshd[1239244]: debug1: KEX done [preauth] 21:19:24 sshd[1239244]: debug1: userauth-request for user dusted service ssh-connection method publickey [preauth] 21:19:24 sshd[1239244]: debug1: attempt 0 failures 0 [preauth] 21:19:24 sshd[1239244]: debug1: PAM: initializing for "dusted" 21:19:24 sshd[1239244]: debug1: PAM: setting PAM_RHOST to "192.168.40.149" 21:19:24 sshd[1239244]: debug1: PAM: setting PAM_TTY to "ssh" 21:19:24 sshd[1239244]: debug1: userauth_pubkey: test pkalg ssh-rsa pkblob RSA SHA256:#REDACTED #REDACTED# #REDACTED# #REDACTED## [preauth] 21:19:24 sshd[1239244]: debug1: temporarily_use_uid: 1000/1000 (e=0/0) 21:19:24 sshd[1239244]: debug1: trying public key file /home/dusted/.ssh/authorized_keys 21:19:24 sshd[1239244]: debug1: fd 5 clearing O_NONBLOCK 21:19:24 sshd[1239244]: debug1: /home/dusted/.ssh/authorized_keys:2: matching key found: RSA SHA256:#REDACTED #REDACTED# #REDACTED# #REDACTED## 21:19:24 sshd[1239244]: debug1: /home/dusted/.ssh/authorized_keys:2: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding 21:19:24 sshd[1239244]: Accepted key RSA SHA256:#REDACTED #REDACTED# #REDACTED# #REDACTED## found at /home/dusted/.ssh/authorized_keys:2 21:19:24 sshd[1239244]: debug1: restore_uid: 0/0 21:19:24 sshd[1239244]: Postponed publickey for dusted from 192.168.40.149 port 49164 ssh2 [preauth] 21:19:24 sshd[1239244]: Connection closed by authenticating user dusted 192.168.40.149 port 49164 [preauth] 21:19:24 sshd[1239244]: debug1: do_cleanup [preauth] 21:19:24 sshd[1239244]: debug1: monitor_read_log: child log fd closed 21:19:24 sshd[1239244]: debug1: do_cleanup 21:19:24 sshd[1239244]: debug1: PAM: cleanup 21:19:24 sshd[1239244]: debug1: Killing privsep child 1239245 21:19:24 sshd[1239244]: debug1: audit_event: unhandled event 12 21:19:24 sshd[1239115]: debug1: main_sigchld_handler: Child exited

    bug 
    opened by DusteDdk 1
  • B/W icon hard to see when selected

    B/W icon hard to see when selected

    the black and white icon is hard to see when selected on a white background; the 7 becomes white and only the key is visible.

    fix: add a white border around the 7

    bug 
    opened by cy384 0
  • More complete color support

    More complete color support

    ssheven supports 16 colors, but actually only 8 colors, because that's what the "traditional" quickdraw environment supports

    • detect current color depth
    • figure out how we can do 256+ colors without needing a whole screen buffer
    • hook into libvterm to do the colors
    enhancement 
    opened by cy384 0
  • Terminal string preference

    Terminal string preference

    presently, ssheven uses xterm-mono and xterm-16colors depending on the color setting. Not all systems support these. Add a custom text field setting and save into preferences so the user can provide their own.

    enhancement 
    opened by cy384 0
Releases(0.8.9)
Owner
null
crypted admin shell: SSH-like strong crypto remote admin shell for Linux, BSD, Android, Solaris and OSX

crypted admin shell: SSH-like strong crypto remote admin shell for Linux, BSD, Android, Solaris and OSX

Sebastian 135 Jan 2, 2023
🎀 toy gemini client in ansi c (c89)

?? viv a toy gemini client written in ansi c (c89). nowhere near finished, but it works! (mostly). what works ? everything except the custom ui. limit

GemRest 3 Apr 17, 2022
A library for interactive command line interfaces in modern C++

cli A cross-platform header only C++14 library for interactive command line interfaces (Cisco style) Features Header only Cross-platform (linux and wi

Daniele Pallastrelli 888 Dec 31, 2022
Activity Indicators for Modern C++

Highlights Thread-safe progress bars and spinners Header-only library. Grab a copy of include/indicators. Single-header version in single_include/indi

Pranav 2.3k Jan 4, 2023
Table Maker for Modern C++

Source for the above image can be found here Table of Contents Quick Start Formatting Options Style Inheritance Model Word Wrapping Font Alignment Fon

Pranav 1.4k Dec 30, 2022
Contour - A modern C++ Terminal Emulator

contour is a modern terminal emulator, for everyday use. It is aiming for power users with a modern feature mindset.

Contour Terminal Emulator 1.1k Dec 28, 2022
Argument Parser for Modern C++

Highlights Single header file Requires C++17 MIT License Quick Start Simply include argparse.hpp and you're good to go. #include <argparse/argparse.hp

Pranav 1.5k Jan 1, 2023
easy to use, powerful & expressive command line argument parsing for modern C++ / single header / usage & doc generation

clipp - command line interfaces for modern C++ Easy to use, powerful and expressive command line argument handling for C++11/14/17 contained in a sing

André Müller 977 Dec 29, 2022
A modern frontend for Neovim.

A modern frontend for Neovim.

Rohit Pradhan 1.6k Jan 2, 2023
Free open-source modern C++17 / C++20 framework to create console, forms (GUI like WinForms) and unit test applications on Microsoft Windows, Apple macOS and Linux.

xtd Modern C++17/20 framework to create console (CLI), forms (GUI like WinForms) and tunit (unit tests like Microsoft Unit Testing Framework) applicat

Gammasoft 434 Dec 30, 2022
Modern C++ Undo / Redo framework

History Hello Developers! I present to you History, a modern C++ (C++17) Undo / Redo framework. My goal was to create a non-intrusive, compact and int

null 18 Dec 7, 2022
为了让 Windows 平台上的 ssh agent 能适配多种 ssh client 和在 wsl 环境下使用的工具

ssh-agent-bridge 为了让 Windows 平台上的 ssh agent 能适配多种 ssh client 和在 wsl 环境下使用的工具 Windows 平台上存在着多种 ssh agent 的实现,由于 Windows 平台的特殊性,这些 agent 程序都有一套自行实现的进程间通

Apache553 67 Dec 1, 2022
Windscribe 2.0 desktop client for Windows, Mac and Linux

Windscribe 2.0 Desktop Application This repo contains the complete source code for the Windscribe 2.0 app. This includes installer, service/helper, ba

Windscribe 362 Jan 3, 2023
远程桌面、RADMIN、SSH、VNC集中管理器

远程连接管理器 远程桌面、RADMIN、SSH、VNC集中管理器 本软件用于集中管理远程桌面、ADMIN、SSH、VNC,双击主机即可直接调用对应客户端对服务器进行控制。 软件运行需要VC2010 X86运行库支持。

null 231 Dec 15, 2022
crypted admin shell: SSH-like strong crypto remote admin shell for Linux, BSD, Android, Solaris and OSX

crypted admin shell: SSH-like strong crypto remote admin shell for Linux, BSD, Android, Solaris and OSX

Sebastian 135 Jan 2, 2023
Run SSH on iOS 12 device.

Shelly12 Run SSH on iOS 12 device. Only worked on iPad Air 1, iOS 12.4 Working Get root Set tfp0 to hsp4 Escape Sandbox Restore/Remount RootFS Defeat

null 6 May 11, 2021
An SSH file manager that lets you edit files like they are local

An SSH file manager that lets you edit files like they are local

Allan Boll 505 Jan 10, 2023
Corkscrew is a tool for tunneling SSH through HTTP proxies

Corkscrew is a tool for tunneling SSH through HTTP proxies

Bryan Chan 925 Jan 1, 2023
C++ TCP/IP and SSH stack with bounded run time and no dynamic memory allocations

Static Network Stack TCP/IP stack with all-static allocations designed for bare metal (no operating system) embedded applications with minimal footpri

Andrew Zonenberg 24 Jul 22, 2022
SSH tarpit that slowly sends an endless banner

Endlessh: an SSH tarpit Endlessh is an SSH tarpit that very slowly sends an endless, random SSH banner. It keeps SSH clients locked up for hours or ev

Christopher Wellons 5.7k Dec 27, 2022