first commit

This commit is contained in:
2026-05-29 08:20:56 +01:00
commit 949299f58d
6368 changed files with 527176 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
# ssh
## Purpose
Detects SSH private keys and public keys embedded in arbitrary strings.
SSH private keys grant direct shell access to any server that has the
corresponding public key in its `authorized_keys`. Public keys in authorized
format can reveal the owner's cryptographic identity and are also worth
flagging in security audits.
## Features
- Detects OpenSSH private key blocks (`-----BEGIN OPENSSH PRIVATE KEY-----`),
RSA public keys (`ssh-rsa AAAA…`), ECDSA keys (`ecdsa-sha2-nistp256 AAAA…`),
and Ed25519 keys (`ssh-ed25519 AAAA…`).
- Private key blocks receive a higher confidence score (`0.98`) than public
keys (`0.92`).
- All four regex patterns reset `lastIndex` before each scan.
## Usage: Basic Example
```ts
import { detect } from '@suaveplan/security-codes/patterns/ssh';
const key = '-----BEGIN OPENSSH PRIVATE KEY-----\nb3BlbnNzaC1rZXkAAAA=\n-----END OPENSSH PRIVATE KEY-----';
const matches = detect(key);
// matches[0].type === 'ssh-key', confidence 0.98
```
## Usage: Advanced Example
```ts
import { detect } from '@suaveplan/security-codes/patterns/ssh';
const config = 'authorized_key=ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ user@host';
const matches = detect(config);
// matches[0].type === 'ssh-key', confidence 0.92
```
## API Reference
### `detect(input: string): SecurityCodeMatch[]`
Scans `input` for SSH keys.
| Parameter | Type | Description |
|---|---|---|
| `input` | `string` | The string to scan (may contain newlines) |
Returns `SecurityCodeMatch[]` with `type: 'ssh-key'`. Private key blocks
have `confidence: 0.98`; public key formats have `confidence: 0.92`.
## Implementation Notes
OpenSSH private keys use PEM-like delimiters but with a specific header string
that distinguishes them from generic PEM blocks detected by the `pem` module.
Both modules may return matches for the same region — the detector deduplication
layer resolves overlaps by preferring higher-confidence matches.
Public key formats (`ssh-rsa`, `ecdsa-sha2-nistp256`, `ssh-ed25519`) are
matched with a permissive `\S+` suffix to handle the variable-length base64
blob and the optional trailing comment (e.g. `user@host`). The lower confidence
score of `0.92` for public keys reflects the fact that a standalone `ssh-rsa
AAAA…` string in a configuration file is common and not necessarily a secret
leak, whereas an OpenSSH private key block is always sensitive and receives
`0.98`.