Steps
-
Update the system and make a user
Work as a normal user with
sudo, not as root. Pick your own name instead ofdev.$ ssh [email protected] $ apt update && apt upgrade -y $ adduser dev $ usermod -aG sudo dev
-
Put your SSH key on the server
Run these on your laptop, not on the server. The key is a pair of files: the private one stays with you, the public one goes to the server. ed25519 is the type the Ubuntu documentation recommends: shorter and cheaper to compute than the older types.
$ ssh-keygen -t ed25519 $ ssh-copy-id username@target_machine $ ssh [email protected]
Keep this last session open. You need it in the next step if something goes wrong.
-
Switch off passwords and root login
Put the changes in a small file of their own. sshd reads the files in
/etc/ssh/sshd_config.d/in alphabetical order, and for each setting the first value it finds wins. A name that starts with00-goes first and beats files that cloud images ship. Test the config before you restart: if SSH is your only way in, one mistake can lock you out.$ sudo nano /etc/ssh/sshd_config.d/00-hardening.conf PasswordAuthentication no KbdInteractiveAuthentication no PermitRootLogin no $ sudo sshd -t $ sudo systemctl restart ssh.service $ sudo sshd -T | grep -E 'passwordauthentication|permitrootlogin' passwordauthentication no permitrootlogin no
By default sshd accepts passwords (
PasswordAuthentication yes), and root may log in only with a key (PermitRootLogin prohibit-password). Now open a second window and log in again asdev. Only when that works, close the first one. -
Turn on the firewall
Deny everything coming in, allow everything going out, then open SSH before you enable the firewall. Open a port only when a program listens on it, for example 80 and 443 for a web server.
$ sudo ufw default deny incoming $ sudo ufw default allow outgoing $ sudo ufw allow OpenSSH $ sudo ufw allow 80,443/tcp $ sudo ufw enable $ sudo ufw status verbose
ufw asks for a confirmation because enabling it over SSH can cut your session. Answer
y: SSH is already allowed. -
Install security updates by themselves
On Ubuntu, security updates switch on right after installation and run once a day. Install the package, then ask it for a trial run to see what it would do.
$ sudo apt install unattended-upgrades $ sudo unattended-upgrade -v --dry-run
On Debian, switch it on with
sudo dpkg-reconfigure unattended-upgradesand answer yes. The settings live in/etc/apt/apt.conf.d/50unattended-upgradesand/etc/apt/apt.conf.d/20auto-upgrades; logs are in/var/log/unattended-upgrades. -
Add fail2ban
fail2ban scans log files such as /var/log/auth.log and bans IP addresses with too many failed logins by updating firewall rules. Keep your settings in
jail.local, not injail.conf. These values ban an address for an hour after five failures in ten minutes.$ sudo apt install -y fail2ban $ sudo nano /etc/fail2ban/jail.local [sshd] enabled = true maxretry = 5 findtime = 10m bantime = 1h $ sudo systemctl restart fail2ban $ sudo fail2ban-client status sshd
Check that it works
Try to log in with a password from your laptop: the server must refuse. Then list what listens on the network and who logged in lately. Every open port in the list should be one you can name.
$ ssh -o PubkeyAuthentication=no [email protected] Permission denied (publickey). $ sudo ss -tlnp $ last -n 10
What Uno adds on top of these six steps
On an Uno computer part of the work is already done: no ports are open until you ask, and SSH takes keys only.
It sleeps when idle and keeps its memory
With nothing to do for 10 minutes it falls asleep with every program still in memory. A visitor, a bot message or you wake it. Every hour asleep earns you a boost.
An AI agent sets it up for you
Tell Uno what you need in a chat. It installs, configures and starts it on your computer, and you watch every command it runs. Or bring Claude Code or Codex with your own subscription.
Fast where it counts
NVMe disks and DDR5 with error correction (ECC). On 16 vCPU an Uno computer scores like a MacBook Air M4 in Geekbench 6: a second MacBook in the cloud for $70 a month.
A clean address of your own
Traffic can leave through a static address of a regular internet provider in one of 8 countries, used only by your account. Fewer captchas for your agent's browser.
Nothing happens unseen
Every time Uno itself touches your computer, it goes to your access log: who, when and why.
The short way: switches and a log in one place
On an Uno computer the firewall steps do not apply: its kernel has no firewall inside, so ufw and fail2ban do not run there. The platform does that job: a computer answers only on the ports you forward, any port can be hidden from the internet, and SSH accepts keys only. Updates are still yours. In Uno Work, Settings, Security, you set where your computer answers from: SSH on or off; open to the internet or closed; only chosen ports; only chosen addresses; or only through a VPN on the computer. The same page opens Who got in: Uno Work sign-ins, commands and agent keys, scheduled tasks, app installs, Uno automation and SSH sign-ins, each with who, when, from which address, through which channel, and why.
Small: $5 a month
- The log covers the ways in that go through Uno and your computer's own sign-ins. Root on the physical server can reach a computer's disk and memory without leaving a row in the log.
- Uno does not promise that it cannot get in. It promises that its ways in are written down and shown to you.
- Uno does not update the software inside your computer for you. Security updates (step 5) are yours to turn on.
- No firewall runs inside an Uno computer, so you cannot add your own rules there. You choose which ports are forwarded and who can reach them.
Common problems
I locked myself out
/etc/ssh/sshd_config.d/00-hardening.conf or run sudo ufw allow OpenSSH. On an Uno computer open it from Uno Work.Passwords still work after step 3
sudo sshd -T | grep passwordauthentication to see the effective value, and look in /etc/ssh/sshd_config.d/ for a file that sorts before yours. Rename yours so it sorts first, then restart ssh.I run Docker and a container port is open anyway
-p 127.0.0.1:8080:80, and put a web server in front.fail2ban says there is no jail called sshd
jail.local sits in /etc/fail2ban/ and that the section is spelled [sshd]. On a system without /var/log/auth.log add backend = systemd to that section, then restart fail2ban.Should I move SSH to another port?
Every computer comes with its access log
Pick the size. Every plan keeps the access log of its computers and the Security switches.
Small
A Telegram bot, a VPN, a small backend
$5/ month
- 1 vCPU · 1 GB
- 15 GB disk
- 25 GB cloud storage
- 5 boosts a month
Plus
Agents that work with your laptop closed
$20/ month
- 4 vCPU · 4 GB
- 40 GB disk
- 100 GB cloud storage
- Uno Work in the cloud
Pro
A product in production, a second MacBook
$70/ month
- 16 vCPU · 16 GB
- 120 GB disk
- 300 GB cloud storage
- Speed of a MacBook Air M4
Max
A team and many agents at once
$200/ month
- 32 vCPU · 48 GB
- 300 GB disk
- 1,024 GB cloud storage
- 5 public IPv4
Add Uno AI to any plan: 40 h of AI work a month on Small, 100 h on Plus, unlimited on Max. Today: GLM-5.3 Flash and MiMo v2.6 Pro. Or sign in with your own Claude or ChatGPT.