Skip to content
Mac mini Server Setup Guide

Getting started with your node

Find your connection credentials, set up key-based login, and run your first build. This guide follows the setup process from start to finish, so you can bring a cloud Mac into your team's workflow.

Your server is a dedicated physical machine, not a virtual machine. The macOS desktop and command line are fully available.

From order to first connection

Make sure your node is ready

Order today and get started today. The typical process takes about 4 minutes. Check payment confirmation and node status in the console, and don't create a duplicate order while your payment is being confirmed.

  1. 1

    Place your order: choose a node and term

    Choose a location from Singapore, Tokyo, Seoul, or Hong Kong, then select daily, weekly, monthly, or quarterly billing. Check the model, add-ons, and expiration date before placing your order.

    About 1 min
  2. 2

    Pay: keep your order details

    Pay with USDT-TRC20 or Visa, Mastercard, or Amex via Stripe. All charges are in USD. Available payment options depend on the gateways returned by the backend.

    About 1 min
  3. 3

    Wait for node setup

    Connect once the physical node has been assigned and system setup is complete. If your order is paid but the instance is still being prepared, check its status first; don't mistake a node that isn't ready yet for a network issue.

    About 2 min
  4. 4

    Get your credentials: open the node details

    Sign in to the console, open your instance list, and select the node for your order to view its host address, SSH port, and username. Use the details shown on the page, and verify the node ID before connecting.

    View when ready

Total: about 4 min. If you've paid but still can't view your credentials, submit a support ticket in the console with your order number and current status. Never post full credentials, private keys, or payment card details on a public page.

First connection

Verify your connection, then your toolchain

This example uses a Tokyo node and shows selected commands for SSH login, checking SDKs, archiving, and uploading. Replace the hostname, workspace, scheme, and fastlane workflow with the values for your project. This is not a performance test or a log from a real order.

Tokyo node · Hostname YOUR_NODE_HOST · Example commands and output
$ ssh -v -i ~/.ssh/minissh_ed25519 -p "$NODE_SSH_PORT" "$NODE_USER@$NODE_HOST"
debug1: Server host key: ssh-ed25519 SHA256:…
debug1: Authentication succeeded (publickey).
Authenticated using publickey.
Welcome to your Mac mini.

$ xcodebuild -showsdks
iOS SDKs:
    iOS -sdk iphoneos

$ xcodebuild -workspace App.xcworkspace -scheme App -archivePath build/App.xcarchive archive
** ARCHIVE SUCCEEDED **

$ fastlane upload
Uploading build to App Store Connect
Upload complete

First SSH connection: set NODE_HOST,NODE_USER and NODE_SSH_PORT to the values shown in your node details. Check the host fingerprint the first time you connect. If you can't verify it, confirm it through a support ticket instead of ignoring the host identity check.

First build: run xcodebuild -version and xcodebuild -showsdksfirst, and note your current toolchain. Prepare your project dependencies, signing assets, and build settings before archiving. fastlane upload is available only if your project defines the workflow and upload permissions are configured.

Know where each step finishes: A successful SSH connection doesn't mean your project can build, and a successful archive doesn't mean the upload is complete. Save the result of each step—connection, archive, and upload—so you can pinpoint where an issue occurred.

Secure access

Verify keys before disabling passwords

Give each person access through their own public key; never share one private key with the whole team. When changing authentication settings, keep your current session open and use a second terminal to verify that a new connection works before signing out.

  1. 01

    Generate a key locally

    Run this command on your computer and protect the private key with a passphrase. Only the .pub public key file should be uploaded or shared. Keep the private key, which has no file extension, on your computer.

    ssh-keygen -t ed25519 -f ~/.ssh/minissh_ed25519
  2. 02

    Add your public key and test

    Add the public key to the target user's ~/.ssh/authorized_keys file on the node, with each key on its own line. You can transfer it over an existing, verified connection. Then check the directory and file permissions.

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

    Open a second terminal and test login, specifying the private key explicitly. Confirm you're signing in as the expected user on the expected node before changing authentication settings.

  3. 03

    Disable password authentication

    Have a member with admin access check the effective SSH service configuration. Set PasswordAuthentication and KbdInteractiveAuthentication to no. Then check the syntax and effective values to make sure no other configuration overrides them.

    sudo /usr/sbin/sshd -t
    sudo /usr/sbin/sshd -T | grep -E 'passwordauthentication|kbdinteractiveauthentication'

    Apply the changes using your system's service management method, then test a new connection again. If you're unsure about the configuration, submit a support ticket first. Don't restart the service or disable remote login from your only working session.

  4. 04

    Tunnel your desktop connection

    After confirming that screen sharing is set up on the node and the user has the right permissions, create an SSH tunnel on your computer. This example forwards local port 15900 to port 5900 on the node's loopback address, without exposing a listening port to your local network.

    ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:15900:127.0.0.1:5900 -i ~/.ssh/minissh_ed25519 -p "$NODE_SSH_PORT" "$NODE_USER@$NODE_HOST"

    Then connect your local desktop client to 127.0.0.1:15900. The connection ends when you close the tunnel terminal. If SSH works but the desktop connection doesn't, check the screen-sharing service on the node instead of exposing the desktop port directly.

Working across time zones

Share a machine, not an identity

Dedicated means the physical node is yours to use; it doesn't automatically isolate tasks between team members. If teammates in North America and Asia-Pacific share a Mac mini server, set up separate accounts, agree on build windows, and keep clear handoff notes.

Separate accounts for each team member

Create a separate macOS user for each team member and add only their public key. Use standard permissions for daily development, and have a designated admin handle system-level changes.

When someone leaves the team, remove their access and check for access tokens saved in build tools. Don't just change a shared password.

Handoff checklist: users, keys, admin ownership.

Schedule resource-heavy tasks

Agree on a time zone for build schedules. Before starting an archive in Asia-Pacific, check whether teammates in North America still have tasks running. Avoid overlapping large archives, dependency installs, and system updates where possible.

Separate project and output directories by user or branch to avoid clearing build artifacts another team member needs.

Handoff checklist: task owner, start and end times, output path.

Record the environment and task results

Before handing off, note the code version, Xcode version, command run, and exit status. If the toolchain needs to change, let the next time zone know in advance so teammates aren't surprised by a different environment.

Desktop interactions across regions depend on each user's network. Use SSH for long-running tasks where possible, and keep build logs available for review.

Handoff checklist: versions, commands, logs, outstanding issues.
Add your rental term to the project calendar

Add a node for busy periods, then take your data with you

Schedule ongoing and temporary tasks separately. Each additional node is a separate rental and won't inherit code, dependencies, keys, or build artifacts from your existing node. Prepare the environment first, then move tasks over.

  1. 01

    Add a node for the same project

    Use the order page to add a node, choosing a daily, weekly, monthly, or quarterly term to match your workload. Choose from MiniSSH M4 Core (M4 / 16GB RAM / 256GB SSD) and MiniSSH M4 Plus (M4 / 24GB RAM / 512GB SSD). Check the plans page for full pricing and add-ons.

  2. 02

    Move temporary workloads

    Sync the code and dependencies your project needs, and configure access separately for the new node. Run a repeatable build and confirm you can retrieve the output before moving more branches or batch jobs. Don't keep your only backup on a temporary node.

  3. 03

    Make sure it won't renew

    Check the temporary node's expiration date in the console and don't renew it. If the console offers an auto-renew setting, make sure it's turned off. The node stops at the end of the term, with no deactivation fee. Export build artifacts and logs and revoke access tokens before expiration, so you don't have to look for files after the node is reclaimed.

Troubleshooting

Save the details, then submit a ticket

Nodes run continuously, 365 days a year. If something goes wrong, submit a support ticket in the console and add updates to the same ticket. Don't repeatedly reinstall, change settings, or pay again; it makes the issue harder to investigate.

Issue What to check first What to include in your ticket
Can't connect over SSH Is the node ready? Do the address, port, and username match the node details? Is the error a timeout, connection refused, or authentication failure? Include the full error type. Node ID, city, issue start time and time zone, network used, and SSH error output with sensitive information removed.
Build hangs or fails Check disk space, other tasks running on the same node, and any recent toolchain or dependency changes. Determine whether the logs have stopped updating or the process has actually exited. Command run, Xcode version, start time, last log output, exit code, and whether the issue is reproducible.
Need to reinstall the system Back up your code, build artifacts, and essential settings first. Note which parts of the environment you want to keep or set up again. Reinstalling affects existing data on the node. Node ID, reason for reinstalling, backup status, and a suitable time for the work. Confirm the scope in a support ticket before scheduling it.
Question about payment or renewal Check the relevant order and billing status first, and confirm which node the transaction is for to avoid paying twice for another order. Order number; for USDT-TRC20, include the transaction hash. For a Stripe card payment, include the order number and the error shown in the console. Never send your full card number.

Include the time zone: “14:30 local time, UTC+8” is easier to verify than “can't connect this afternoon.” If your team spans Asia-Pacific and North America, include a convenient time to reach you.

Check for updates in your original ticket: Sign in to the console, open your ticket list, and select the relevant ticket to read replies or add information. If you can't sign in, email support@minissh.com with your account email and relevant order number. Don't send your password or private key.

Keep reading

Find the next step for your task

For more detailed instructions, browse the technical articles in these three areas. The commands on this page illustrate the sequence of steps; check the paths, permissions, and tool versions against your own environment.

  • Set up a remote development environment

    Learn about account separation, project directories, dependency setup, and handoffs across time zones. Start with a repeatable development environment, then bring in other team members.

  • SSH tunnels and access security

    Learn about public key authentication, adjusting password authentication, and local port forwarding. Before changing security settings, always keep a verified connection open.

  • Cloud Xcode builds

    Learn about checking SDKs, archive options, and fastlane workflows. Verify archiving and uploading separately; a single success doesn't mean the whole workflow is reliable.

Ready? Start with your first node

Rent by the day from $20.8/day. Already have a node? Check its credentials in the console. Not ordered yet? Choose a term that fits your project.