Tailscale 1.102.4 for reMarkable 2 / firmware 3.27
Guide updated September 14, 2026

This walkthrough connects Inkline to another computer over Tailscale, then
uses the tablet's ordinary SSH client for a shell or Git repository. The
remote computer still needs an SSH server and an account you can log into.
Signing in to Tailscale and authorizing an SSH key are separate steps.

1. INSTALL ON BOTH DEVICES

On your remote computer, install Tailscale and sign in:
  https://tailscale.com/download
Enable its ordinary SSH server (Remote Login on macOS, sshd on Linux), and
note your remote account name. Run "whoami" there if you are unsure.

On the tablet, install the Tailscale utility using:
  https://inkline.goblinreactor.com/install.html?utility=tailscale#utilities
Choose Git there too if you want to clone repositories. No compiler or extra
tablet package manager is needed. The installer checks compatibility before
changing the installation. For a manually downloaded bundle, verify its
SHA-256, extract it in /tmp, and run these from its tailscale/ directory:

  ./install-device.sh --check
  ./install-device.sh

Installation enables inkline-tailscale.service at boot. The preflight uses a
separate daemon in RAM without signing in. Commands are installed under
/home/root/.local/bin, which is already on Inkline's PATH.

2. SIGN IN ON THE TABLET

Connect the tablet to Wi-Fi, open Inkline with Ctrl+Alt+T, and run:

  tailscale up --accept-dns=false --accept-routes=false --hostname=remarkable2

The command prints "To authenticate, visit:" followed by an HTTPS URL.
Leave it running. Open that entire URL in a browser on your phone or computer;
the tablet does not need a browser. Sign in to the same Tailscale account as
the remote computer and approve the tablet. If your tailnet requires device
approval, its administrator must also approve it in the admin console:
  https://login.tailscale.com/admin/machines

Use the link printed by YOUR tablet. Sign-in links are specific to a device
and expire; there is no shared enrollment link in this guide or package.
Once approved, the command returns to the shell. Then run:

  tailscale status
  tailscale ip -4

Find the remote computer in the status output. In the examples below,
"workstation" means its actual tailnet name; its 100.x.y.z Tailscale address
also works. "alice" means your SSH account ON THAT COMPUTER, which may differ
from your Tailscale account. Substitute both before running the examples.

  tailscale ping --c 3 workstation

A pong confirms tailnet connectivity. A relay/DERP response is also valid.
This check does not prove that the remote SSH server is listening or that
your tailnet's access policy permits its TCP port.

3. PREPARE A DROPBEAR SSH KEY

The tablet's stock SSH client is Dropbear. Its default private key is
~/.ssh/id_dropbear; an OpenSSH-format private key cannot be used directly.
If you already have a working id_dropbear, keep it and skip to step 4.
Otherwise, choose ONE of the following options inside Inkline.

Option A: reuse your existing, unencrypted ~/.ssh/id_ed25519 key.
This writes a converted copy, keeps the original, and preserves the same
public identity. A public key already authorized on a server or GitHub
does not need to be registered again. The converter cannot read encrypted
OpenSSH private keys; use option B if you do not have a convertible key.

  (
    set -eu
    umask 077
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    if test -e ~/.ssh/id_dropbear || test -L ~/.ssh/id_dropbear; then
      printf '%s\n' 'Existing id_dropbear preserved.'
    else
      /usr/sbin/dropbearmulti dropbearconvert openssh dropbear ~/.ssh/id_ed25519 ~/.ssh/id_dropbear
      chmod 600 ~/.ssh/id_dropbear
    fi
  )

Option B: create a new native Ed25519 key on the tablet.
This also preserves any existing id_dropbear. Register the new public key
with each destination you want to access, as described in step 4.

  (
    set -eu
    umask 077
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    if test -e ~/.ssh/id_dropbear || test -L ~/.ssh/id_dropbear; then
      printf '%s\n' 'Existing id_dropbear preserved.'
    else
      /usr/sbin/dropbearmulti dropbearkey -t ed25519 -f ~/.ssh/id_dropbear
      chmod 600 ~/.ssh/id_dropbear
    fi
  )

4. AUTHORIZE THE PUBLIC KEY

In Inkline, display only the public key line:

  /usr/sbin/dropbearmulti dropbearkey -y -f ~/.ssh/id_dropbear | awk '$1 ~ /^(ssh-|ecdsa-)/ { print }'

Copy that whole line, beginning with ssh-ed25519 for the keys above. It is
safe to give this PUBLIC line to the destination. Keep id_dropbear itself
on the tablet: it is the private key, not the file to upload. You can also
run the public-key command in the tablet's USB SSH session from your computer,
then use that computer's terminal to copy the public line into its clipboard.

For your own Linux or macOS computer, open a terminal ON THAT COMPUTER as
the account you will SSH into, and run:

  umask 077
  mkdir -p ~/.ssh
  chmod 700 ~/.ssh
  printf '\n' >> ~/.ssh/authorized_keys
  cat >> ~/.ssh/authorized_keys

Paste the public key as one line, press Enter, then Ctrl+D to finish cat.
This appends to authorized_keys, preserving its existing entries. Then run:

  chmod 600 ~/.ssh/authorized_keys

For GitHub, open https://github.com/settings/ssh/new in a browser while signed
in. Give the key a recognizable title, choose "Authentication Key", paste the
same public line, and save it. GitHub's instructions are here:
  https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account

5. CONNECT OVER SSH

Back inside Inkline (replace alice and workstation):

  tailscale-ssh alice@workstation

On the first connection, compare the displayed host-key fingerprint with the
remote computer's SSH host key before accepting it. Type "exit" to return
to the tablet. For a server listening on another port, put -p before the host:

  tailscale-ssh -p 2222 alice@workstation

tailscale-ssh uses the tablet's stock SSH client and "tailscale nc HOST PORT".
It handles Dropbear's proxy syntax and accepts tailnet names and IP addresses.
It does not enable the separate Tailscale SSH server feature. With the stock
SSH command directly, the equivalent is:

  ssh -o 'ProxyCommand=/home/root/.local/bin/tailscale nc workstation 22' alice@workstation

Supply the ACTUAL host and port in ProxyCommand. Dropbear does not expand
OpenSSH's %h and %p placeholders. Ordinary "ssh alice@workstation" does not
automatically use this userspace Tailscale connection.

6. USE GIT

To clone an existing repository on your tailnet computer, replace the account,
host, and repository path below. "git/notes.git" is relative to that remote
account's home directory. Git must be installed on both devices.

  mkdir -p ~/dev
  GIT_SSH_COMMAND=tailscale-ssh git clone alice@workstation:git/notes.git ~/dev/notes
  git -C ~/dev/notes config core.sshCommand tailscale-ssh
  git -C ~/dev/notes pull

GIT_SSH_COMMAND applies only to that clone. The repository setting saves the
helper for future pulls, fetches, and pushes. To use it in an existing
repository whose SSH remote is on your tailnet, run the same
"git -C PATH config core.sshCommand tailscale-ssh" with that repository's path.

GitHub's public SSH endpoint is reached directly over the tablet's normal
internet connection. After authorizing the key on GitHub, substitute OWNER
and REPO in this command; use a COLON after github.com, not a slash:

  mkdir -p ~/dev
  git clone git@github.com:OWNER/REPO.git ~/dev/REPO

Do not set core.sshCommand to tailscale-ssh for this GitHub example. The key
must belong to a GitHub account with access to the repository. Check GitHub's
published host-key fingerprints when accepting its host key:
  https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints

IF SOMETHING DOES NOT WORK

* "tailscale: not found": open Inkline after installing the utility. From a
  different shell, run /home/root/.local/bin/tailscale explicitly, or add
  /home/root/.local/bin to that shell's PATH.
* Cannot connect to tailscaled: run
    systemctl start inkline-tailscale.service
    systemctl status inkline-tailscale.service
* NeedsLogin, or a sign-in link expired: in Inkline on the tablet, run
    tailscale login --accept-dns=false --accept-routes=false --hostname=remarkable2
  Open the new link and complete step 2. Run this locally, since signing in
  again can interrupt a connection that already depends on Tailscale.
* Awaiting device approval: ask your tailnet administrator to approve the
  tablet in the admin console; repeating the login will not bypass approval.
* No pong: check Wi-Fi, that both devices are online in the same tailnet, and
  that the name/IP is correct. Use "tailscale ping", not ordinary "ping".
* Pong but SSH times out or is refused: check the remote SSH server, port,
  firewall, and tailnet access policy. A pong does not check SSH access.
* SSH authentication fails: check the remote account name and its authorized
  public key. On the tablet, check ~/.ssh/id_dropbear with the public-key
  command in step 4. "String too long" while reading a private key can mean
  an OpenSSH key was passed to Dropbear without conversion.
* A host-key warning: verify why the remote host's key changed before updating
  known_hosts. Do not disable host-key checking to make the warning disappear.
* A later git pull fails: check "git -C ~/dev/notes config core.sshCommand";
  a tailnet repository should report tailscale-ssh. Also check "git remote -v"
  from inside it to confirm that the host/path refer to your tailnet server.
* Git prints "Ignoring unknown configuration option SendEnv=GIT_PROTOCOL":
  this is a harmless Git/Dropbear compatibility message, not an auth failure.

USERSPACE NETWORKING AND STORAGE

No kernel TUN device is needed. The local SOCKS5 and HTTP proxies share
127.0.0.1:1055. Applications must explicitly use a proxy or the TCP dialer;
ordinary system traffic and DNS do not automatically use Tailscale. This
SSH/Git recipe carries TCP, not Mosh's UDP data channel. Goblin Mosh is
unchanged. An HTTPS example, if curl is installed, is:

  curl --proxy socks5h://127.0.0.1:1055 https://workstation/

The root-only daemon socket is /run/inkline-tailscale/tailscaled.sock.
Taildrop is disabled. Routine daemon logs are discarded, log uploads are
disabled, and temporary/log buffers live in RAM. Essential identity and
preferences persist under:

  /home/root/.local/share/inkline-utilities/tailscale/state

Sign-in, preference changes, and key renewal can write state. Routine network
traffic is not spooled to flash. The service uses CPU, RAM, and battery while
enabled, including when Inkline is closed. Disabling log uploads reduces the
diagnostics available to Tailscale support.

MANAGE OR REMOVE

Check, stop, or start the service:

  systemctl status inkline-tailscale.service
  systemctl stop inkline-tailscale.service
  systemctl start inkline-tailscale.service

Stop now and disable at boot, or start now and re-enable at boot:

  systemctl disable --now inkline-tailscale.service
  systemctl enable --now inkline-tailscale.service

"tailscale down" disconnects the tailnet but leaves the service running.
"tailscale logout" signs this tablet out. Upgrades preserve sign-in state.
Install a new Inkline utility release to update the binaries; do not use an
upstream installer to overwrite this managed package. Firmware upgrades may
remove the systemd link; rerunning current/install-device.sh restores it
after its firmware compatibility check passes.

Remove the service, binaries, and local sign-in state with:

  /home/root/.local/share/inkline-utilities/tailscale/current/uninstall-device.sh

Remove the old device entry from the Tailscale admin console if desired.
Documents and other utilities are preserved.

Installation guide: https://inkline.goblinreactor.com/install.html#tailscale
Current text guide: https://inkline.goblinreactor.com/docs/tailscale.txt
Downloads and storage: https://inkline.goblinreactor.com/utilities.html#tailscale
Sources and licenses: https://inkline.goblinreactor.com/source.html
Tailscale CLI reference: https://tailscale.com/docs/reference/tailscale-cli
Userspace networking: https://tailscale.com/docs/concepts/userspace-networking
