Typo in sshd_config
Final
Fixed. Charged $9.00.
Charged only after the owner's server answered SSH and the web check twice, at 07:08:03 and 07:08:18 UTC.
- Quote (done) $9.00 fixed
- Hold (done) approved 07:06:34
- Keyboard (done) locked: agent finished
- Probe (done) 2 of 2 passed
- Charged $9.00 warranty passed
Done · Charged $9.00, warranty passed
Keyboard locked: rescue doneagent finished at 07:08:02 UTC · 5 PayPal checks
Charged
$9.00captured, final
1 min 45 sfrom hold to charge
7agent turns
24 of 24warranty checks passed
How your $9.00 moved
-
Quote: $9.00, fixed before any key
A free look at the screen found: sshd will not start, or listens on the wrong port, because of its configuration. Screenshots only.
-
Hold: the owner approved, PayPal held $9.00
Nothing charged yet.
Authorization 68M239…7322 · CREATED $9.00 -
Keyboard: lent, then locked
Claude typed for 7 turns while PayPal said the hold was live. Then the keyboard locked: agent finished.
-
Probe: the owner's own check passed twice
07:08:03 and 07:08:18, no failure between.
ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches -
Charged: PayPal captured $9.00
1 min 45 s after the hold.
Capture 7WP611…644E · COMPLETED $9.00 -
Warranty: 24 of 24 checks passed
Re-checked every minute, 24 times (compressed for the demo: each minute stands in for an hour).
PayPal, read live
Read from the PayPal sandbox at 04:27:59 UTC
| Object | Status | What it means | Amount | PayPal answered | Webhook |
|---|---|---|---|---|---|
| Order9DX392…063W | COMPLETED | The owner approved the hold in PayPal. | $9.00 | 07:01:43 | none for this call |
| Authorization68M239…7322 | CAPTURED | The hold became the charge. | $9.00 | 07:06:3407:08:19 capture | not yet |
| Capture7WP611…644E | COMPLETED | Charged $9, after the owner's check passed twice. | $9.00 | 07:08:19final | not yet |
Full log 64 rows
- Quotesshd_config_error T1 $9.00
- Quotediagnosis: sshd will not start because of an error in /etc/ssh/sshd_config. Quote T1, $9.00.
- PayPalcreate_order with PayPal-Request-Id order-53f4549c-b4f5-4d51-8a7f-ea9b779ce79d
- PayPalorder 9DX392958A657063W PAYER_ACTION_REQUIRED
- StateQuote ready → Waiting for your PayPal approval
- PayPalauthorize with PayPal-Request-Id auth-53f4549c-b4f5-4d51-8a7f-ea9b779ce79d
- PayPalauthorization 68M23905BN0687322 CREATED $9.00
- StateWaiting for your PayPal approval → Hold approved, lending the keyboard
- LockPayPal authorization 68M23905BN0687322 CREATED $9.00: keyboard allowed
- StateHold approved, lending the keyboard → Agent at the keyboard: keyboard lent to the agent
- AgentThe screen is showing a login prompt for "keyhold-demo," and I need to sign in as root with the password I've been given. My instructions say to enter the password only when a password prompt appears, and this one comes right after the username, so I'll type it now.
- Agenttyped: root ↵
- Agenttyped: [console password] ↵
- LockPayPal authorization 68M23905BN0687322 CREATED $9.00: keyboard allowed
- Agenttyped: systemctl status ssh.service --no-pager | cat; journalctl -u ssh -b --no-pager | tail -n 30; sshd -t; echo DONE-T ↵
- AgentI'm checking line 3 of sshd_config, where "PermitRootLogn" is misspelled, and I plan to back up the file first. Rather than guess the intended value, I'll look at the file before changing it to "PermitRootLogin". I also want to check the web page on port 80 later.
- Agenttyped: cp /etc/ssh/sshd_config /etc/ssh/sshd_config.keyhold-bak; head -n 6 /etc/ssh/sshd_config | cat -A | cut -c1-120; grep -n -i '^[^#]' /etc/ssh/sshd_config | cat; echo DONE-V ↵
- LockPayPal authorization 68M23905BN0687322 CREATED $9.00: keyboard allowed
- AgentI'm correcting the typo on line 3 from "PermitRootLogn" to "PermitRootLogin", keeping the value "no" as it is. Then I'll test, restart, and verify the config. PasswordAuthentication stays "no" since the owner logs in with keys, so I'm leaving that line alone.
- Agenttyped: sed -i '3s/^PermitRootLogn no$/PermitRootLogin no/' /etc/ssh/sshd_config && sed -n 3p /etc/ssh/sshd_config && sshd -t && echo SSHD-T-OK; systemctl reset-failed ssh.service; systemctl start ssh.service; systemctl is-active ssh; systemctl status ssh.service --no-pager | cat | head -n 12; ss -ltnp | cat; systemctl is-active demo-page.socket demo-page.service; echo DONE-F ↵
- LockPayPal authorization 68M23905BN0687322 CREATED $9.00: keyboard allowed
- AgentI'm checking why the sed edit didn't take: the pattern expected "PermitRootLogn no" at the start and end of the line, but the line seems to match. I'm wondering if there's hidden whitespace or a carriage return, since I'd earlier looked at the line with cat -A. I'm now looking at the sshd output more closely: the status shows the service active with ExecStartPre returning 0, which seems inconsistent with the "Missing privilege separation directory" message from sshd -t. I'm also trying to reconcile which line in the head output actually reads "PermitRootLogn no". I'm checking why the sed ...
- Agenttyped: grep -n 'PermitRoot' /etc/ssh/sshd_config | cat -A; sshd -t; echo "rc=$?"; ls -ld /run/sshd; curl -sS -m 5 http://localhost/ | head -n 5; echo DONE-G ↵
- LockPayPal authorization 68M23905BN0687322 CREATED $9.00: keyboard allowed
- AgentThe sed edit does look applied now: line 3 reads "PermitRootLogin no", and sshd's config test passed. SSH is running and listening on port 22, and the web page is serving content. Next I'll confirm the ssh service is active with systemctl.
- Agenttyped: systemctl is-active ssh; systemctl --failed --no-pager | cat; echo DONE-H ↵
- AgentRoot cause: /etc/ssh/sshd_config line 3 had a misspelled directive "PermitRootLogn no", so sshd exited with "Bad configuration option" and ssh.service failed to start. I backed up the file to /etc/ssh/sshd_config.keyhold-bak, corrected line 3 to "PermitRootLogin no" (value unchanged), reset the failed state and started ssh. Verified: sshd -t exits 0, systemctl is-active ssh reports active, sshd listens on 0.0.0.0:22 and [::]:22, no failed units, and http://localhost/ serves the demo page ("keyhold-demo: the page is being served."). Nothing else was changed.
- Lockkeyboard locked: the agent session ended (done)
- Agentdone: Root cause: /etc/ssh/sshd_config line 3 had a misspelled directive "PermitRootLogn no", so sshd exited with "Bad configuration option" and ssh.service failed to start. I backed up the file to /etc/ssh/sshd_config.keyhold-bak, corrected line 3 to "PermitRootLogin no" (value unchanged), reset the failed state and started ssh. Verified: sshd -t exits 0, systemctl is-active ssh reports active, sshd listens on 0.0.0.0:22 and [::]:22, no failed units, and http://localhost/ serves the demo page ("keyhold-demo: the page is being served."). Nothing else was changed.
- StateAgent at the keyboard → Checking your server: the agent called finished; the owner probe decides
- Probepass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Probepass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Probepass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Probepass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Probestable: 2 passes 14.6841 s apart, no failure between
- PayPalcapture with PayPal-Request-Id cap-53f4549c-b4f5-4d51-8a7f-ea9b779ce79d
- PayPalcapture 7WP61145AR824644E COMPLETED $9.00
- StateChecking your server → Fixed and charged: probe passed
- WarrantyWarranty (judge mode, compressed): re-probed every minute for 24 minutes; each minute stands in for an hour. Two failed checks in a row refund the full capture.
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- Warrantypass: SSH ok, page ok. ssh ok: logged in as probe; http ok: HTTP 200, sha256 matches
- StateFixed and charged → Warranty passed: window ended: 24 checks, never 2 failures in a row
Audit details full ids, PayPal-Request-Ids, invoice, quote, owner probe, ledger checks, timing
Ids
- Rescue
53f4549c-b4f5-4d51-8a7f-ea9b779ce79d- State
WARRANTY_OK- Invoice id
keyhold-53f4549c-b4f5-4d51-8a7f-ea9b779ce79d- Order
9DX392958A657063W· intent AUTHORIZE- Authorization
68M23905BN0687322· expires 2026-12-07 07:06:33 UTC- Capture
7WP61145AR824644E- Refund
- —
- Ending
- window ended: 24 checks, never 2 failures in a row
PayPal-Request-Ids: two ticks per money call
Each call is written to the outbox with its PayPal-Request-Id before it is sent, so a retry never moves money twice. PayPal's synchronous answer is the first tick; the verified webhook is the second.
| Call | PayPal-Request-Id | API answer | Webhook |
|---|---|---|---|
| Order | order-53f4549c-b4f5-4d51-8a7f-ea9b779ce79d |
✓ 07:01:43 | none for this call |
| Authorization | auth-53f4549c-b4f5-4d51-8a7f-ea9b779ce79d |
✓ 07:06:34 | waiting |
| Capture | cap-53f4549c-b4f5-4d51-8a7f-ea9b779ce79d |
✓ 07:08:19 | waiting |
Ledger checks
ok captured ≤ authorized ≤ quote, one capture at most, no void after capture, refund ≤ captured.
Diagnosis and plan
sshd will not start, or listens on the wrong port, because of its configuration
- [FAILED] Failed to start ssh.service - OpenBSD Secure Shell server.
- See 'systemctl status ssh.service' for details.
1. Run 'systemctl status ssh.service' and 'journalctl -u ssh -b --no-pager | tail -n 30' to read the exact error sshd logs when it fails to start. 2. Run 'sshd -t' to test /etc/ssh/sshd_config and print the line number of any syntax error. 3. If the error is in sshd_config, correct that line to a valid directive or restore the stock file from /usr/share/openssh/sshd_config or a backup copy. 4. Run 'sshd -t' again and confirm it prints no errors. 5. Run 'systemctl start ssh.service' then 'systemctl status ssh.service' to confirm it is active. 6. If the logs show missing host keys instead, stop and re-classify as ssh_host_keys_missing.
Quote
- Fault class
sshd_config_error- Tier
- T1 · $9.00
- Quote hash
1cc95eb9d9ce7b6d67f26f9352e54fb98cd8ac60e4d9a172e062e3a848d0a7db
Owner probe, fixed at checkout
A capture happens only after this check passes twice, far enough apart, with no failure between.
- SSH login
- as
probeon port 32827, with a key only the probe holds - Probe key
SHA256:CcgWuPvbHnBojBASpsq+D15PKuJPkuBo/cq0ROAmp4M- Page
- HTTP GET / on port 32824: the page body has sha256 429d6e1517d7805977c57314076c608c7acf30e52b93b0b5103ae57152669bc8
- Spec hash
faf6a1592a0a5823dda9f3d6b4a2da8bbccc52695cfce6d861bc4793d8d5aadc
Sent as the order'scustom_id.
Timing and cost
- Created
- 2026-11-08 06:59:01 UTC
- Model cost
- about $0.0032
- Timing
- Judge mode, compressed timing. Capture after two passes at least 10 s apart, with no failure between. Warranty (judge mode, compressed): re-probed every 20 seconds, 6 times (2 minutes in all); the real plan is 24 hourly checks. Two failed checks in a row refund the full capture.
- Warranty
- re-checked every minute, 24 times (compressed for the demo: each minute stands in for an hour)