Simple Secure Shell
A modern SSH app for iPhone and iPad
Requires iOS 17 or iPadOS 17 or later.
Simple SSH is a terminal app for iOS. Full-screen programs such as vim, htop, mc and tmux work as they do in a desktop terminal.
Sessions and iOS
iOS suspends an app shortly after it leaves the screen, and a suspended app cannot keep a network connection open. No iOS terminal app can change that, so Simple SSH keeps the session on the server instead.
Each host is set to one of three modes:
- tmux (or GNU screen). The app runs
tmux new-session -A -D -s termw, which attaches to the session if it exists and creates it if it doesn't. When iOS suspends the app, the session keeps running on the server. When you come back, the app reconnects and re-attaches, and the screen is as you left it. It also reconnects after a network change or a dropped connection, with backoff, and retries right away when the network comes back. - Direct shell. A plain login shell. The connection is held open for about 30 seconds after you switch away, which covers a quick trip to another app. After that the shell ends, along with anything running in it.
If you already use tmux:
- The session is named
termwby default, and the name can be changed per host. A second tab on the same host getstermw-2(etc), so tabs never share a session. Closing tab 2 and opening a new one re-attaches totermw-2. -Ddetaches every other client from that session when the app attaches. This is how a stale client left behind by a suspended app is cleared. If you attach to the same session from a desktop, the two will take it from each other.- tmux must be installed on the server. The app adds the usual
Homebrew, MacPorts and
~/.localdirectories toPATHto find it. If it's not found, you get a plain shell and a warning that the session will not survive. - The launch command runs under
/bin/sh, so a login shell of fish, csh or nushell is fine. - Open tabs are restored when the app is relaunched. A tmux or screen tab re-attaches to its session on its own if it can sign in without asking; otherwise it waits for you to open it.
Compatibility
Simple SSH is built on Apple's swift-nio-ssh, which is widely compatible but doesn't support all SSH features.
Sign-in
| Password | Typed each time, or saved in the device keychain. |
| Ed25519 keys | Generated in the app, pasted, or imported from a file. |
| ECDSA keys | P-256, P-384 and P-521, pasted or imported. |
| Secure Enclave keys | ECDSA P-256, generated on the device. The private key cannot be exported, copied or backed up. |
| Passphrase-protected keys | OpenSSH-format files, which is what ssh-keygen writes by default. The passphrase is used once to unlock the key and is not saved. |
| No sign-in | For public servers that let anyone in, such as games and demos. |
| RSA and DSA keys | Not supported. Use an Ed25519 key instead; the app can generate one. |
| Older PEM-format encrypted keys | Not supported. ssh-keygen -p -f on a copy rewrites the key in the current format, keeping the passphrase. |
| Keyboard-interactive and two-factor prompts | Not supported. A server that offers only these can't be reached; it needs password or public-key sign-in enabled. |
After you sign in with a password, the app can install a public key
on the server for you. It appends the key to
~/.ssh/authorized_keys if it isn't already there.
Protocol
| Key exchange | curve25519-sha256, ecdh-sha2-nistp256, -nistp384, -nistp521 |
| Ciphers | aes256-gcm@openssh.com, aes128-gcm@openssh.com, then aes256-ctr and aes128-ctr with hmac-sha2-256 for servers without GCM, such as Dropbear on routers |
| Server host keys | Ed25519 and ECDSA |
| RSA-only host key | Can't connect. The connection fails during key exchange. Any current OpenSSH server also has an Ed25519 host key. |
| Older ciphers only (CBC, 3DES) | Can't connect. |
Not included
- SFTP or any file transfer
- Port forwarding
- ssh-agent and agent forwarding
- Jump hosts
- Importing
~/.ssh/config - Mosh, telnet and serial connections
The terminal
- Terminal emulation by SwiftTerm.
TERMisxterm-256color, which every server has a terminfo entry for. - Tabs, each its own connection. On iPad, dragging a tab to the edge of the screen gives it a window of its own. Split View and Stage Manager are supported.
- Mouse reporting: a tap is a click and a drag sends motion, so programs like mc respond to touch. With a trackpad or mouse on iPad, hovering sends pointer motion too. The terminal menu turns mouse reporting off when you'd rather select text.
- Inline images: kitty graphics, iTerm2 inline images and sixel.
Inside tmux, images need
tmux set -g allow-passthrough onon the server; the app does not change your tmux settings for you. The window size is reported in pixels as well as cells, so images come out at the size the program intended. - On iPad, esc, ctrl and arrow keys sit in the keyboard's shortcut bar. On iPhone they're in a row above the keyboard, with tab and function keys.
- With a hardware keyboard, keyboard shortcuts for tabs and font size. Hold ⌘ to see them.
ssh://links open the app. A link to a saved host asks before connecting; any other link opens a new host, filled in, for you to review. Passwords in links are ignored.- Light and dark appearance, and five app icons to choose from.
Privacy and security
- The app has no account of its own, no analytics, no ads and no tracking. The only network traffic is the SSH connections you make. The App Store privacy label is “Data Not Collected”.
- Passwords and private keys are stored in the device keychain, marked this-device-only. They don't sync to iCloud and aren't included in backups. On a new device you add your keys again (for a Secure Enclave key, you generate a new one).
- Host keys are trusted on first use, with fingerprints in the same
SHA256:formssh-keygen -lprints. If a known host's key changes, the connection stops and both fingerprints are shown. Nothing reconnects in the meantime. - An optional app lock uses Face ID, Touch ID or the device passcode.
- The connection check after you return to the app opens and closes an SSH channel. It never types anything into your shell.
See the privacy policy.
Screenshots
The screenshots use demo content.
Support
Email support@falldaysoftware.com, or @stevex@mastodon.social on Mastodon.
Simple SSH uses SwiftTerm (MIT) and Apple's SwiftNIO, SwiftNIO SSH and Swift Crypto (Apache-2.0). Their licences are in the app under Settings › Acknowledgements.