Skip to contentNode.js on every plan · private Redis & PostgreSQLSee what's included →

Guides

How to use SSH on shared hosting

Get a real terminal on your hosting account, run Composer, npm and WP-CLI, and the two connection details people get wrong.

SSH is on every plan here, including the entry tier. It is a real shell in your site’s own container, with the command line tools a deploy actually needs. If you have only ever had FTP on shared hosting, this is the feature that changes how you work.

Add your key

In the panel, open your site and go to Advanced, then Developer tools. That screen shows your SSH username and takes your public key.

If you have never made an SSH key, one command does it:

ssh-keygen -t ed25519

Accept the defaults, then paste the contents of ~/.ssh/id_ed25519.pub into the panel. The .pub file is the public half and is safe to paste anywhere; the other file is the private half and never leaves your machine.

Connect

ssh your-username@yourdomain.com

Port is the standard 22, so no flag needed. Two details trip people up:

  • The username is the one shown in Developer tools, not your panel login or email address.
  • The hostname only works if your domain resolves directly to us. If Cloudflare proxies your domain, its IP is Cloudflare’s, and Cloudflare does not forward SSH. Use the server’s IPv4 address instead, which is shown on your site’s overview page in the panel, under At a glance.

You land in your site’s home directory, inside its own container. You can see your files and your processes and nothing belonging to anyone else, which is the point of per-site isolation.

What is available once you are in

The PHP on the command line matches whatever version your site runs, so a script that works over the web works the same in the shell. Alongside it: Composer, Git, WP-CLI for WordPress sites, rsync, and Node.js with npm on sites using the Node runtime.

That makes the common workflows one-liners:

composer install --no-dev
wp plugin update --all
git pull
npm ci && npm run build

The Laravel guide turns these into a full deploy sequence if that is your framework.

The one thing SSH cannot do here

Cron jobs are managed in the panel, not by editing crontab from the shell. If you try crontab -e and wonder why changes do not stick, that is why. Set scheduled tasks up in the panel and they run exactly as configured.

FTP still exists if you want it

For one-off file transfers, FTP accounts live under Advanced too. But if you are comfortable enough with a terminal to want SSH, rsync over SSH does the same job faster and resumes when your connection drops.

Keep reading

Other guides