Other machines, over ssh
Use the daemon on another machine as you use this one: list its panes, run things in them, attach, or show the whole interface in your terminal. It all goes through your own ssh, and the daemon there opens nothing to the network.
You need two things:
sshto that machine asks nothing. insensical runssshwhere nobody can answer, so use a key (loaded in your agent if it has a passphrase) and connect once by hand to accept the host's key. Ifssh build trueprints nothing and asks nothing, you're set.iscis there, in the same version as here.isc host putbrings it there (see "Putting insensical on a machine" below). Or install it there yourself with the one-line install, which takes a version: see Installing.~/.local/bin,/usr/local/binand Homebrew'sbinare looked in even when a shell started bysshdoesn't.
Name the machine once, then check it:
isc host add build me@build.example.com
isc host check buildThe second word is whatever you'd give ssh: a host, user@host, or a Host from your ~/.ssh/config. Your ssh configuration, keys, agent and jump hosts all apply.
| Command | Does |
|---|---|
isc host add NAME WHERE | Names a machine. Takes --color, --icon and --careful, and --no-node (see below) |
isc host check NAME | Meets the machine, prints four lines, changes nothing and starts nothing. It fails unless the machine is ready to use |
isc host ls [--json] | Lists the machines you've named, with where ssh goes and what's set on each |
isc host set NAME | Changes a named machine. --color, --icon, --careful set; --no-color, --no-icon, --no-careful clear; --ssh changes where ssh goes; --name NEW renames. Only what you give changes |
isc host rm NAME | Forgets a machine. Nothing changes on it |
isc host put NAME | Brings this version of isc to a machine: see below |
isc host restart NAME | Restarts the server there: see "What it doesn't do" |
isc host answer NAME | Lets ssh ask you what it has to ask: see "When ssh has a question" |
A name may use ASCII letters and digits and . - _ + @ : % [ ], with ssh:// before it if you like (ssh://me@build:2222). Anything else is refused, in the settings file too: it's listed among the settings' problems and never tried. A Host in your ssh configuration with other characters isn't offered; give it a second name there.
isc host check prints four lines:
✓ Reached build · 42 ms
✓ insensical 0.3.0 is there
✓ Its server is running
✓ 3 projects, 1 wants youThey say whether ssh got there and how long a round trip takes, whether insensical is there in a version that works with this one, whether its server (the daemon) is running, and what's open there. ✓ is a line that holds and ✗ one that doesn't, with what to do about it underneath. Lines after a failure aren't tried and are marked ·. → marks what isc host put can put right. No server running yet isn't a failure: the first command that needs one starts it.
The names are lines under [hosts] in your settings file, which you can write yourself: build = "me@build.example.com". A machine can also carry a colour, an icon and a mark that it's one to be careful on:
build = { ssh = "me@build.example.com", color = "teal", icon = "server", careful = true }coloris#rrggbbor one ofblue,green,orange,purple,pink,teal,gold,grey,rustandindigo. With none set, a machine gets one of those ten from its name, the same every time.iconis one ofserver,laptop,desktop,mini,nas,board,phone,containerandcloud. Any other word is left in the file, and the machine is shown as a server.- A machine of your tailnet that
isc host addfound there also keeps its node:build = { ssh = "me@build", node = "nABC123CNTRL" }. See "A machine of your tailnet" below.
Putting insensical on a machine. If a machine has no isc, or an older one, isc host put build brings it to this version, never to a newer one: the two must match exactly. It says which way it went.
An
iscthere that can update itself is asked to. It runsisc upgrade --versionwith this version, so the machine downloads that release itself and checks its signature. That works on a Mac too. If the machine can't reach GitHub, a Linux machine gets a copy ofiscfrom here instead, and you're told.An
iscthat a package or Homebrew owns isn't touched. You get the command that updates it, to run there.A machine with no
isc, or one from beforeisc upgrade --check --json, gets a copy ofiscin~/.local/bin, no sudo. That works on x86-64 and arm64 Linux. On a Mac you're given the line to run there yourself.A server already running there is left running, on the older version. You're told what a restart would come to.
--restart-serverdoes it, as does a yes to a second question at a terminal, orisc host restart buildafterwards. A server that can move to the new version keeps everything in its panes. One that can't is stopped and started, which ends what runs in its panes, and you're told how many panes first. A server asked to move that can't refuses and runs on.
Then put --host before any command:
isc --host build ls
isc --host build run -- make test
isc --host build attach 3
isc --host buildThe last one is the whole interface, in this terminal, on that machine's projects.
- From inside the interface you can go to another machine without leaving. "Go to a machine" in the palette lists this computer and every machine you've named. Each is tried while you look and says
reachedwith the version ofiscthere, ornot reached; mark that one and the line below says why.Entershows the marked machine's projects. While another machine is shown, its name stands at the left of the top row. One machine is shown at a time, and what runs on the others runs on. A machine that can't be reached leaves you where you were, with a notice. INSENSICAL_HOST=buildin a shell does the same for every command you run there, except the ones that end something:isc kill-server,isc close,isc tab close,isc project closeandisc project sleep. With only the variable set, those are refused and say which machine it names. Add--host buildto the command to act there.- What belongs to that machine is that machine's. The file finder lists its files. A new project's directory is a directory there, and
~is your home there. A project's drawing is kept by the daemon there.isc --host build integratesets up the agents there, andisc --host build config setchanges the daemon's settings there: see section 11 and [Settings and themes](/settings).
When the machine can't be reached. A machine that has sent nothing for four seconds is given up on. A command says "the link to the other machine was lost" and ends. Nothing typed into the silence is delivered later: see Other machines in the window.
The interface dims your panes and puts a small card over them: "build is out of reach", how long ago it was last heard once that's over ten seconds, and the key to leave. It tries again after a second, then two, then four, up to every thirty seconds, with no key pressed, and shows your panes again when the machine answers. Any key tries at once. Nothing there was touched, and no daemon is started on this machine in its place.
If the machine won't let you in any more, because ssh would ask for a password or doesn't know the machine's key, the interface tries once and stops, since a machine that counts failed logins might lock you out. It says what ssh needs. Put that right, then press a key.
Typing on a far machine. When the round trip takes 70 milliseconds or more, a letter you type is drawn at once, a little fainter than the rest, and turns to its usual colour when the program shows it. Your keys still go to the program at once, unchanged.
type-ahead = "off"turns it off."on"draws ahead over any link to another machine, however quick. A pane on this machine never has it.
From a browser. isc hub on this computer can carry a paired browser on to these machines over the same ssh. Only a device you made with --far gets that; see "Your other machines, through this computer" under In a browser.
Tailscale, Headscale and WireGuard need nothing of their own. Give ssh the machine's name or address on that network:
isc host add build me@build.tailnet-name.ts.net
isc host add nas me@100.64.0.7
isc host add office me@10.8.0.2With Tailscale SSH there's no key to set up; the rule is the same, ssh build true must ask nothing.
A machine of your tailnet. A name on a tailnet stops working when the machine or the tailnet is renamed, or when this computer doesn't use the tailnet's DNS. The machine's address goes on. So when you isc host add one of your tailnet's machines, its node's id is written beside it, and it's dialled at its address:
isc host add build me@build--no-nodekeeps it as typed. So does a name your ssh configuration gives a machine, which leads where your configuration says. The window'sAdd Remote Hostdialog keeps the node of a machine you choose underTailscaleor type by its tailnet name, and changing a machine's address in the settings sheet looks for its node asisc host set build --ssh me@builddoes.
When ssh has a question. A link is made by ssh told to ask nothing, so each thing it would have asked is a machine that isn't reached. Each has its own words:
| It says | What happened | What to do |
|---|---|---|
ssh hasn't met build before | ssh has no host key for it yet | isc host answer build, and say yes once you've compared the fingerprint |
build's host key is not the one ssh has for it | The key changed. A machine set up again does this, and so does another machine standing in its place | Find out why first. When you're sure, ssh-keygen -R build forgets the old key |
ssh needs your key or password for build | It wants a key, a passphrase or a password | isc host answer build shows what it asks. A key in your agent (ssh-add) or on the machine (ssh-copy-id) lets it in without asking |
Tailscale wants you to sign in again before it lets ssh through | The tailnet's rules ask for a fresh sign-in | isc host answer build shows the link to sign in at |
Tailscale's rules don't let you in as root on build | The tailnet's access rules refuse that user, or you | Whoever looks after the tailnet changes its rules |
build is off | Tailscale says it isn't online | Turn it on, or start Tailscale there |
build did not answer in time, build could not be found, build refused the connection, build cannot be reached from this network | As they say | The line under each says what to check |
isc host check prints ssh's own last line under these, after `ssh` said:.
isc host answer build runs your own ssh to the machine at your terminal, free to ask, running nothing there but true. You see ssh's real question and answer it yourself; insensical doesn't read, keep or pass on what you type. Then it meets the machine and prints the four lines. It needs a terminal and succeeds only if the machine was then reached. For a machine you haven't named, give it where ssh goes: isc host answer me@build. In the window, the Answer button runs it for you in a new tab on this computer, and in the interface in a terminal a does in "Go to a machine".
What it doesn't do:
- A link can't ask you anything. A host that wants a password, a passphrase or a yes to its key is refused, with what to do about it.
- The two versions must match (the same protocol and terminal engine, which
isc versionprints). If they don't, you're told which machine has which.isc host putputs this version on the other machine. If the other machine's is newer, update this one. --hostis foriscand the interface in a terminal. The window shows every machine you've named at once: see Other machines in the window.- Some commands are about this machine only, and say so if you give them a host:
daemon,proxy,restart-serverandhost. To restart the server elsewhere, useisc host restart build: it meets the machine, tells you what a restart comes to, and asks. If the server there already runs the installed insensical, it says so and restarts nothing. Don't runssh build isc restart-server: a shell started bysshoften can't find the server.isc --host build kill-serverasks the daemon there to stop, and can't signal one that doesn't answer. configreaches the daemon's settings there and no others. A setting of the interface, such astheme, is read from this machine's file, andisc --host build config set theme paperis refused. Leave--hostout for those.- A path you click there is the other machine's. Only web addresses are followed on this computer. With
nvim,vim,hxornanoinopen-files-with, the click opens the file in a pane on that machine; otherwise it copies the path. See What a click on a path does. INSENSICAL_SSHnames a program to run in place ofssh, given the same arguments.INSENSICAL_TAILSCALEdoes the same fortailscale.