Skip to main content

Hostinger VPS SSH Access

The Two-VPS Layout

VPSTemplateIPRoleHostname
srv1483559Docker + Traefik187.124.113.147OpenClaw / TOMMY executionvps.devarno.cloud
srv1140896n8n72.61.201.142hab.so1.io (FORGE/TOMMY workflows)srv1140896.hstgr.cloud
Both are Ubuntu 24.04, KVM 2 on Hostinger, UK-Manchester region.

Step 1: DNS Record

Add an A record pointing your subdomain to the VPS IP. Do not edit the existing @ record — create a new one.
TypeNameValueTTL
Avps187.124.113.14750
If using Cloudflare: set proxy to off (DNS only / grey cloud). Cloudflare’s proxy does not support SSH. Verify:
python3 -c "import socket; print(socket.gethostbyname('vps.devarno.cloud'))"
# Expected: 187.124.113.147
dig and nslookup may not be installed on all systems. The Python socket method works universally.

Step 2: SSH Key via Hostinger Panel

  1. Go to hPanel > VPS > Settings > SSH Keys
  2. Click ”+ SSH key”
  3. Paste your local public key:
cat ~/.ssh/id_ed25519.pub
  1. Name it descriptively (e.g. devarno-cloud-local)
Hostinger installs the key into /root/.ssh/authorized_keys automatically.
The Hostinger SSH key panel operates at the account level. Verify the key actually appears in authorized_keys on the server — see the debugging skill if it doesn’t work.

Step 3: The publickey-hostbound-v00 Problem

Symptom

SSH connects, key exchange completes, the server says “I accept this key”, but the session hangs indefinitely. The auth log shows:
Connection closed by authenticating user root ... [preauth]
The server-side debug (sshd -d) shows:
Accepted key ED25519 SHA256:... found at /root/.ssh/authorized_keys:2
Postponed publickey for root from ... [preauth]
Connection closed by authenticating user root ...

Root Cause

OpenSSH 10.x clients use publickey-hostbound-v00@openssh.com by default. The signed authentication packet sent after PK_OK is silently dropped by the network layer between your machine and the Hostinger VPS. The key exchange (small packets) works fine, but the larger signed auth response never arrives. This is specific to certain network paths — Hostinger’s internal network (169.254.0.1) and inter-VPS connections work fine.

Workaround: Enable Password Auth

On the VPS (via Hostinger web terminal):
# The 60-cloudimg-settings.conf file overrides 50-cloud-init.conf
echo "PasswordAuthentication yes" > /etc/ssh/sshd_config.d/60-cloudimg-settings.conf
systemctl restart ssh    # NOTE: Ubuntu 24.04 uses 'ssh', not 'sshd'
Then reset the root password via hPanel > VPS Overview > Root password > Change.

Workaround: Paramiko (Python)

When native OpenSSH hangs, Python’s paramiko library bypasses the issue entirely:
import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(
    'vps.devarno.cloud',
    username='root',
    password='YOUR_ROOT_PASSWORD',
    timeout=10,
    look_for_keys=False,
    allow_agent=False
)

stdin, stdout, stderr = client.exec_command('echo SSH_OK')
print(stdout.read().decode().strip())
client.close()
Install: pip install paramiko

Step 4: Verify

# Option A: Native SSH with password auth
ssh -o ConnectTimeout=5 -o PreferredAuthentications=password \
  -o PubkeyAuthentication=no root@vps.devarno.cloud echo "SSH OK"

# Option B: Paramiko (if native SSH pubkey still hangs)
python3 -c "
import paramiko
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
c.connect('vps.devarno.cloud', username='root', password='PASSWORD',
          timeout=10, look_for_keys=False, allow_agent=False)
_, o, _ = c.exec_command('echo SSH_OK')
print(o.read().decode().strip())
c.close()
"

Hostinger Web Terminal

Always available as a fallback at hPanel > VPS Overview > Terminal. Connects via 169.254.0.1 (link-local), bypassing all external network issues. Use this for:
  • Emergency SSH config fixes
  • Checking /var/log/auth.log
  • Running sshd -d debug mode
  • Any operation when external SSH is down

Key Gotchas

GotchaDetail
Service nameUbuntu 24.04: systemctl restart ssh (not sshd)
Password override60-cloudimg-settings.conf loads after 50-cloud-init.conf and wins
Root userAlways specify root@ — bare IP defaults to your local username
Credential fileRoot password stored at /home/devarno/code/env/claw.env as VPS_OPENCLAW_ROOT
n8n-to-openclaw keyPre-existing key for TOMMY SSH execution — do not remove