SSH & SFTP Access
The SSH page is where you connect to your account from a real terminal or an SFTP client: it shows your connection details ready to copy, manages the public keys that let you log in without a password, and lets you create additional SSH or SFTP accounts, each locked to its own files and its own share of the machine.
Tools → SSH Accesshttps://YOUR-SERVER-IP:8443/tools/sshYour connection at a glance
When SSH is enabled for your account, the top of the page shows a green banner with your exact connection command, ssh username@server-ip -p port, ready to copy, plus a details card with the server IP, port, your username, access level, shell and home directory, each copyable. Whether SSH is on is decided by your hosting plan, so if the banner is red, it is your provider who enables it, not a switch on this page. Administrators always have SSH regardless of plan.
Two kinds of access: jailed and full
Additional accounts you create come in two flavors, and the difference is exactly what you would want it to be:
| Mode | Shell | What it can do |
|---|---|---|
| Jailed (SFTP-only) | none | Transfer files over SFTP, locked inside its home. No terminal, no commands. |
| Full (SSH + SFTP) | bash | A real shell plus SFTP, still locked to its own files. |
Pick Jailed for a designer or a deploy key that only needs to move files, and Full for a developer who needs a command line. Both are confined; the only question is whether a terminal is offered at all.
How a session is put together
Every connection walks the same short path, and each step either narrows what the session can see or caps what it can use:
[isolated] or [jailed], and free / top / htop report the account's own resources, not the whole server'sReading your isolation from the prompt
Every shell session announces what it is. The first thing on the prompt is a label, and it is not decoration — it tells you exactly which walls are around you:
| Prompt | Isolation | What it means |
|---|---|---|
[isolated] alice@server:~$ |
Namespace | Own process list and mount table, plus everything below. ps aux shows only your own processes. |
[jailed] alice@server:~$ |
Chroot jail | Own view of the filesystem. /root and other customers' homes are absent, not merely unreadable. |
[restricted] alice@server:~$ |
Command allowlist in force | As above, and only the commands an administrator granted are reachable. |
cat /etc/shadow answers No such file or directory, not Permission denied. The difference matters: "permission denied" means the file is there and you were turned away, one misconfiguration from being readable. "No such file" means that from where you are standing it does not exist, so there is no permission to get wrong. You can check this yourself in any session./bin/false for jailed accounts or /bin/bash for full ones. A jailed account is chrooted by SSH itself with a forced internal-SFTP command: inside, it sees only its own home, and the account list on the server shows nobody but itself. A full account is wrapped so that logging in drops you into an isolated view of the filesystem containing only your own home and a curated set of tools, and your session is placed in your account's cgroup so its CPU and memory are capped. Either way, one account cannot wander into another customer's files.Resource limits, per account
An SSH account gets its own ceilings, set when you create it and editable afterwards: CPU percentage (100 = one core), memory, swap and a process count. The dialog arrives with the values already filled in, so you can see what the account will actually receive rather than discovering it later.
The process limit is the one that is easy to overlook and hardest to do without: it is what makes a fork bomb survivable. A loop spawning processes forever meets its ceiling and stops, instead of exhausting the kernel's process table and taking every account on the machine with it.
free, top and htop report your account's memory, not the whole server's. This is not cosmetic: software sizes itself from those numbers — the JVM picks a heap, PostgreSQL tuners pick buffers, PHP-FPM calculators pick a worker count — and on a platform that reports the host's figures they configure themselves for a machine many times larger than they are allowed to use, then get killed for exceeding a limit nothing told them about. The core count agrees too: an account allowed 300% is given three cores, and nproc, /proc/cpuinfo and the per-core meters in top and htop all say three.free reports no swap even when the account has a swap allowance, because the version of LXCFS shipped by some distributions switches swap reporting off entirely on this kernel layout. The allowance itself is enforced by the kernel and is unaffected — only the reported figure is missing. Distributions carrying LXCFS 6.0 or newer (Debian 13, Ubuntu 26.04, AlmaLinux 10, Rocky 10) report it correctly.An account created without a panel user — the Independent option in the owner list — has no plan to inherit limits from, so these fields are what constrain it. They are not optional in practice: without them such an account would run with no ceiling at all.
Command permissions
The Command Permissions tab narrows what a full-shell account may run. An account with no list is unrestricted, which is what every account is until you narrow it and what they stay after an upgrade — turning this on is always a deliberate act.
Ticked means the account may run it. The editor opens showing the account's real state rather than an empty slate, and saving with everything still ticked means "no restriction" rather than silently pinning the account to today's command list. A small baseline (ls, cat and friends) cannot be removed: a shell without them is not restricted, it is broken.
wget is not installed by default on AlmaLinux and Rocky, for instance, while curl is everywhere — and offering a command the account cannot run would produce "command not found" while the panel insisted it was allowed.Nothing that could be used to leave the jail or change the machine is offered at all: no package managers, no service control, no user management, and nothing that runs with elevated privileges.
Opening a terminal from the panel
Full-shell accounts have a terminal button in the account list. It opens a shell as that account, inside the same isolation the account gets over SSH — same jail, same limits, same prompt label. Copy and paste work through the keyboard, the right-click menu, or middle click.
SFTP-only accounts show the button disabled: they have no shell to open, and offering one would promise access the plan withholds. For a terminal as the server itself rather than as an account, see the web terminal.
Deleting an account: the files are a separate decision
Removing an account asks what should happen to its files, and keeps them unless you say otherwise. The account, its SSH access and its isolation always go; the directory is yours to decide about.
Public keys, the passwordless way
The SSH Keys tab manages the public keys that authorize logins. You generate a key pair on your own computer (ssh-keygen -t ed25519) and paste the public half here; the panel validates it, shows its fingerprint, and writes it into your account's authorized_keys. The panel never generates or holds your private key, that stays on your machine, which is the whole point of key authentication. Remove a key and its authorization is revoked. When creating an SFTP/SSH account you can require key authentication, password, or both.
The quick guide, and login history
The Quick Guide tab is a copy-paste walkthrough: generate a key on Linux, macOS or Windows (PowerShell or PuTTY), print your public key, connect, and set up an ~/.ssh/config entry so you can just type ssh myserver. The Login History tab shows recent SSH logins (from the server's own login records), so you can see when and from where your account was accessed.
For ROOT: the SSHD configuration tab
ROOT gets an extra tab that edits the server's actual SSH daemon settings, safely: root-login policy, password vs key authentication, the SSH port, max auth tries, TCP and X11 forwarding and more. Every change is validated with sshd -t and backed up first, and a bad config is rolled back automatically rather than locking you out, with extra confirmation prompts on the dangerous toggles (disabling password auth, changing the port, permitting empty passwords).
What has to be switched on
Three things decide how much isolation an account actually gets, and they sit in different places:
| Setting | Where | Effect when off |
|---|---|---|
ssh_access licence feature |
Your Panelica licence | No SSH accounts can be created at all. |
| SSH access in the plan | Users & Plans → the plan → SSH access level | The plan's users get no SSH; account creation is refused. |
| Resource isolation | Panel Settings → Resource Isolation | No CPU, memory or process ceilings are applied. |
| Namespace isolation | Panel Settings → Resource Isolation | Accounts fall back to a chroot jail; the prompt reads [jailed] instead of [isolated]. |
Both isolation switches are on by default on a new installation, and changing either takes effect immediately — no restart. Turning namespace isolation off tears down the namespaces and leaves the jails; turning it back on rebuilds them. No customer data is touched either way.
chroot — it will not claim isolation the account does not have. The prompt label and the account list always agree with reality, which is what makes them worth reading.Access
Behind the ssh_access license feature, scoped by the roles and permissions chain: you manage your own keys and sub-accounts, resellers their customers', ROOT everything. The main account's SSH availability is a plan setting (administrators are always enabled), account creation is permission-gated per role, and the SSHD configuration tab is ROOT-only. Suspending an account blocks its login at the system level, key or password alike.