# ssh

> The ssh identity: Secure Shell. Every field and what is required.

`ssh` is the Secure Shell protocol (RFC 4253). The target is `host:port` (default 22). The step sends and receives raw bytes as hex, and the session persists across steps, so a solution can stage an exchange and continue it.

## Write it in English

A step reads as sentences, the same byte-session forms as [tcp](/docs/solution/identity/tcp/): `send hex "<hex>"` (or `send hex of "<text>"`), `receive <n> bytes`, `receive until "<hex>"`, `port <n>`, `timeout <n> seconds`, `close the connection`, and `expect ...`.

## Fields

`ssh` uses the byte-session fields from [tcp](/docs/solution/identity/tcp/):

| field | required | what it does |
| --- | --- | --- |
| `send` | yes | the bytes to send, as hex or `hex "text"`; empty when a step only reads |
| `recv` | | how many bytes to read at most |
| `recv_until` | | stop reading once this hex marker appears |
| `timeout` | | how long to wait, in seconds |
| `close` | | end the session after this step |
| `capture` | | pull a value out of the received hex for later steps |

## Example

```text
ssh banner
  # read the SSH version banner
  recv 4096
  timeout 5 seconds
  expect the response to match "5353482d"
```