Support

Support Center: Access, Troubleshooting & Billing

Work through the 6-step checklist below and you likely won't need to open a ticket. If you're still stuck, standard tickets get a first response within 30 minutes on business days, and the critical-issue channel is staffed 24/7.

Quick Start

Quick Start: From Credentials to Access in 6 Steps

Provisioning takes about 4 minutes on average, and the Portal emails you an activation notice with your IP, username, and initial key. Follow the steps below in order — most people are connected within 3 minutes.

Save your credentials and lock down key permissions

Download the private key m4rent_ed25519 from the activation email, drop it into ~/.ssh/, and set its permissions to 600 — SSH will refuse to use it otherwise.

chmod 600 ~/.ssh/m4rent_ed25519

First SSH login

Swap in the actual IP from your activation email. The default m4rent user has sudo access, and you'll be asked to confirm the host fingerprint on first connect.

ssh -i ~/.ssh/m4rent_ed25519 m4rent@203.0.113.10

Change the initial password

The random initial password is only used for screen sharing and sudo. Change it to your own strong password right after logging in, then mark "Credentials rotated" in the Portal.

passwd

Open a VNC tunnel

Screen sharing port 5900 isn't exposed to the public internet by default. Forward it through an SSH tunnel to your local machine before connecting, so nothing goes over the wire in plaintext.

ssh -i ~/.ssh/m4rent_ed25519 \
  -L 5901:localhost:5900 -N m4rent@203.0.113.10

Connect via screen sharing

On your local Mac, open Screen Sharing or any VNC client and point it at the local end of the tunnel. Use the m4rent account with the password you just set.

open vnc://localhost:5901

Verify the OS and preinstalled toolchain

Confirm the macOS version, Xcode, and Homebrew match what you expected. If not, trigger a one-click reinstall from the Portal — it takes about 15 minutes.

sw_vers && xcodebuild -version && brew -v

Security baseline: every host ships with SSH password login disabled — key-based auth only — and fail2ban preconfigured. Before touching sshd_config, take a snapshot from the Portal first; a bad config change can be rolled back in under 5 minutes.

Troubleshooting

Connection Troubleshooting Table

Work through each row as symptom → diagnostic command → fix. This table covers roughly 70% of connection-related tickets we see.

Symptom Diagnose with Likely cause & fix
SSH connection times out ping + nc -zv IP 22 Port 22 blocked on your local network: switch to the fallback port 2222 (listening on every node)
Permission denied (publickey) ssh -v to inspect the handshake log Wrong key permissions or path: run chmod 600, and pass the key explicitly with -i
WARNING: UNPROTECTED PRIVATE KEY FILE ls -l ~/.ssh/m4rent_ed25519 Permissions too open: run chmod 600 and retry; don't store the key in a synced cloud drive folder
VNC connects but shows a black screen SSH in and run who to check the session No active graphical session: click "Wake Display" in the Portal, or run sudo caffeinate -u -t 5
VNC says the password is wrong SSH in to verify the password works Screen sharing uses the system password, not the SSH key: reset it with passwd and reconnect
Connection keeps dropping ping -c 20 IP to check packet loss Latency/jitter over a long-haul link: add ServerAliveInterval 30 to your client, or switch to a closer region
REMOTE HOST IDENTIFICATION HAS CHANGED Check the fingerprint on the Portal host details page Host was just reinstalled and the fingerprint changed: run ssh-keygen -R IP to clear the old entry, then reconnect

Before you troubleshoot, check the power and network indicators on the Portal host details page. If the host shows "Reinstalling," every connection method above will be temporarily unavailable — that's expected.

System

System & Environment: Reinstalls, OS Versions, Preinstalled Tools

Reinstall macOS

Go to Portal → Host Details → "Reinstall OS," pick an image, and confirm. This wipes the entire disk and takes about 15 minutes; you'll get an email with the new host fingerprint and initial password once it's done. The IP stays the same, and reinstalls are free.

Export your data or take a snapshot before reinstalling.

Switch OS versions

M4 instances offer macOS 13 / 14 / 15 images; M4 and M4 Pro instances are hardware-limited to macOS 15 and later. Downgrading below what the hardware supports isn't possible via reinstall, so check your target Xcode's system requirements before choosing an instance.

See available images per instance type →

Xcode & Homebrew preinstalls

Every image ships with Homebrew, Git, and the Xcode Command Line Tools preinstalled; the "Dev Image" also bundles the last two stable Xcode releases (switch between them with xcode-select -s). For older versions, install them yourself with xcodes install — with a 1Gbps link from the data center to the mirror, a full Xcode download takes about 8 minutes.

You'll need to accept the Xcode license yourself on first use.

CI/CD

CI/CD Setup: Registering a Self-Hosted Runner

These are dedicated hardware machines with no virtualization layer, and build caches and simulator state persist between jobs — incremental iOS builds are typically 30%+ faster than on hosted runners. Here's how to register on the two most common platforms.

GitHub Actions

Grab a token from your repo's Settings → Actions → Runners, then SSH into the host and run:

mkdir actions-runner && cd actions-runner
curl -o runner.tar.gz -L \
  "$(gh api /repos/OWNER/REPO/actions/runners/downloads \
  --jq '.[]|select(.os=="osx" and .architecture=="arm64").download_url')"
tar xzf runner.tar.gz
./config.sh --url REPO_URL --token YOUR_TOKEN --labels macos,arm64
./svc.sh install && ./svc.sh start
  • ./svc.sh install registers it as a LaunchDaemon, so it auto-starts on reboot;
  • in your workflow, set runs-on: [self-hosted, macos, arm64];
  • keep concurrency at 1 per host — Xcode builds already saturate every core, so running jobs in parallel just slows things down.

GitLab Runner

Install via Homebrew, then register with your project's registration token using the shell executor:

brew install gitlab-runner
gitlab-runner register \
  --executor shell \
  --url GITLAB_URL --token YOUR_TOKEN \
  --tag-list "macos,arm64"
brew services start gitlab-runner
  • the shell executor reuses the host's existing Xcode and signing certificates directly, with no container overhead;
  • keep concurrent at 1, and set a timeout on jobs to avoid hangs;
  • store certificates and provisioning profiles as CI variables and inject them into a temporary keychain at build time.

Running a build farm of more than 5 machines? Ask about volume pricing and a unified management console via our enterprise & bulk-order channel.

Billing

Billing & Account Rules

How is my billing cycle calculated?

Daily billing starts the moment your instance is activated, with each 24-hour block counted as one billing day. Weekly / monthly / quarterly plans are prepaid in full for the period. Within the same calendar month, once your accumulated daily charges reach that instance type's monthly rate (e.g., $99 for M4R M), charges automatically cap out — anything beyond that isn't billed. Your bill and usage details are always available in Portal → Billing.

How do I request an invoice?

Go to Portal → Billing → "Request Invoice," fill in your billing details and tax ID, and submit. The invoice is emailed to your account within 3 business days. We support per-order invoices or a single consolidated invoice per calendar month. If you need a printed invoice or a signed contract copy, reach out through our enterprise channel.

What are the refund terms?

Daily-billed orders are non-refundable once activated. Monthly-or-longer orders can be refunded in full within 72 hours of activation (provided there's been no abuse). Beyond 72 hours, refunds are prorated for remaining full months, with used months charged at the monthly rate. Downtime caused by an issue on our end is compensated via SLA credits, which don't count against your refund allowance.

How long is data kept after an order expires?

Once an order expires, the host is stopped and your data is retained for 72 hours — renew within that window and everything comes back exactly as it was. After 72 hours, the disk is wiped completely and unrecoverable. Snapshots are tied to the host and get deleted along with it. Export anything critical before your order expires — snapshots are a convenience, not a substitute for your own backups.

How is the price difference calculated for upgrades?

Start an upgrade from the Portal, and you'll be charged the daily price difference between your current and target instance type, multiplied by the remaining days in your term. Your data is migrated to the new instance wholesale, and it's back online in about 20 minutes. Only upgrades are supported — for a downgrade, let your current order expire and place a new one. See current pricing on the plans and pricing page.

Status

Service Status & 90-Day Uptime

Live status refreshes every 5 minutes; the full incident timeline is available on the Portal status page.

Region Region code Current status 90-day uptime Median probe latency
Tokyo JP Operational 99.98% 34 ms
Singapore SG Operational 99.97% 68 ms
Hong Kong HK Operational 99.95% 21 ms
Silicon Valley US-W Operational 99.99% 128 ms

Uptime is tracked at minute-level granularity, and every region runs 365 days a year with no scheduled downtime. Monthly uptime target is 99.9%; see our Terms of Service for the credit policy. Latency is the median across probes monitoring from multiple locations worldwide to each region.

SLA

Tickets & Response Times

30 min
First response on business days (GMT+8, 9:00–24:00)
7×24
Critical-issue channel: unreachable hosts, region-level outages, always staffed
4 h
Target recovery time for hardware failures, including full host replacement and data migration
Priority Definition First response Coverage
P1 Critical Unreachable host, region-level network outage, data at risk 15 min 24/7
P2 High Noticeable performance degradation, a single feature unavailable 30 min Business hours
P3 Normal General questions, configuration help, billing issues 2 h Business hours

Open a ticket via the Portal ticketing system (recommended — it automatically attaches your host context) or email support@m4rent.com. For pre-sales or enterprise procurement questions, use the tiered contact channels on our Contact page for a faster response.

Docs

Not finding what you need? There are 80+ more articles in our knowledge base

Log in to the Portal to browse the full knowledge base: per-version Xcode compatibility matrices, language runtime setup guides, and network/security hardening handbooks — all kept in sync with the product.