SShortSingh.
Back to feed

How a Missing SSH Config Caused Daily Two-Factor Friction With Dual YubiKeys

0
·2 views

A developer using two enrolled YubiKeys for SSH authentication experienced a recurring daily annoyance where git push would fail on the first PIN attempt before succeeding on the second. The root cause was the absence of an SSH config file, which meant the SSH agent offered keys in arbitrary order, sometimes presenting the wrong YubiKey's credential to the server before the physically inserted token could satisfy it. Because both keys were generated with user verification required, the failed attempt triggered a visible PIN dialog rather than failing silently, making the problem noticeable roughly 15 times a day. The fix was already hinted at in the key comments, which included each YubiKey's serial number, allowing a shell script paired with OpenSSH's Match exec directive to select the correct identity file based on which token was actually plugged in. The author noted that the Match block must always include a host criterion, since omitting it would apply the restrictive IdentitiesOnly setting globally and break authentication to all other servers.

Read the full story at DEV Community

This is an AI-generated summary. ShortSingh links to the original source for the complete article.

Discussion (0)

Log in to join the discussion and vote.

Log in

Related stories

0
ProgrammingDEV Community ·

Job Postings Are a Free, Untapped B2B Intent Signal, Says Developer

A developer writing on DEV Community argues that job postings are among the most overlooked intent signals in B2B sales and marketing, as they reveal where companies plan to spend money before a purchase decision is made. Unlike paid intent data, job listings are publicly available through structured API endpoints offered by major applicant tracking systems such as Greenhouse, Lever, and Ashby, requiring no scraping or authentication. The author outlines a practical pipeline that detects a target company's ATS, fetches job listings as JSON, and tracks only newly posted roles by diffing against previously stored job IDs. Filtered alerts can then be pushed to tools like Slack, Zapier, or n8n, giving sales teams, recruiters, job seekers, and analysts timely signals about competitor growth and budget activity. The author also disclosed building an Apify Actor called Job Postings Monitor that automates the entire workflow using just a company name as input.

0
ProgrammingDEV Community ·

Junior Dev Shares 5-Week Burnout After Publishing 23 Articles While Job Hunting

A junior developer on DEV Community has opened up about experiencing severe burnout after publishing 23 technical articles in three months while simultaneously job hunting and learning to code. The author describes being bedridden for three days without explanation, followed by repeated crashes even after attempting to return to work and taking a short trip for recovery. Symptoms included an inability to engage with familiar code, emotional numbness, irritability, and loss of interest in activities that previously served as escapes. Now five weeks into the experience, the developer says they have found no complete recovery yet and is considering speaking with a mental health professional. The post ends with a call to the developer community for honest, experience-based advice on recovering from burnout.

0
ProgrammingDEV Community ·

JSON tool silently corrupted large integers in browser; three of four pages left unguarded

A developer at a JSON repair platform discovered that their browser-based tools were silently mangling large integers — such as distributed-system snowflake IDs — without any error or warning. The root cause is a fundamental JavaScript limitation: numbers beyond 2^53-1 lose precision when passed through JSON.parse, with no way to recover the original value afterward. While the platform's server-side API had a pre-parse guard that rejected such inputs with a 422 error, the client-side browser versions were calling JSON.parse directly, bypassing that protection entirely. The team uncovered the gap not through user complaints but by manually testing every tool with oversized numbers, finding three out of four browser pages were affected. The issue reflects a broader, long-standing industry problem — Twitter, Stripe, and even the pandas library have each had to implement their own workarounds for the same class of precision-loss bug.

0
ProgrammingDEV Community ·

Java Concurrency APIs Explained: A Practical Map for Developers

Java offers a wide range of concurrency APIs — including Thread, ExecutorService, Future, CompletableFuture, locks, atomics, and synchronizers — each designed to answer a specific question about parallel work. These APIs can be grouped by responsibility: defining tasks, choosing where they run, obtaining results, protecting shared state, sharing data safely, and coordinating execution. A practical example of building a customer dashboard illustrates how submitting independent tasks before blocking on their results enables true parallel execution. Java 21 introduced virtual threads as a final feature, allowing developers to create one lightweight thread per task without the overhead of platform threads. Understanding the distinction between tasks and threads is key — Runnable and Callable describe work, while Thread and Executor determine how and where that work runs.