Hostinger VPS SSH Access
The Two-VPS Layout
| VPS | Template | IP | Role | Hostname |
|---|
| srv1483559 | Docker + Traefik | 187.124.113.147 | OpenClaw / TOMMY execution | vps.devarno.cloud |
| srv1140896 | n8n | 72.61.201.142 | hab.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.
| Type | Name | Value | TTL |
|---|
| A | vps | 187.124.113.147 | 50 |
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
- Go to hPanel > VPS > Settings > SSH Keys
- Click ”+ SSH key”
- Paste your local public key:
cat ~/.ssh/id_ed25519.pub
- 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
| Gotcha | Detail |
|---|
| Service name | Ubuntu 24.04: systemctl restart ssh (not sshd) |
| Password override | 60-cloudimg-settings.conf loads after 50-cloud-init.conf and wins |
| Root user | Always specify root@ — bare IP defaults to your local username |
| Credential file | Root password stored at /home/devarno/code/env/claw.env as VPS_OPENCLAW_ROOT |
| n8n-to-openclaw key | Pre-existing key for TOMMY SSH execution — do not remove |