Remove personal host aliases from defaults
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
ci / test (push) Has been cancelled
ci / fuzz-smoke (push) Has been cancelled
ci / package-release (linux-x86_64, ubuntu-latest) (push) Has been cancelled
ci / package-release (macos-aarch64, macos-14) (push) Has been cancelled
ci / package-release (macos-x86_64, macos-13) (push) Has been cancelled
ci / package-release (windows-x86_64, windows-latest) (push) Has been cancelled
ci / remote-bench (push) Has been cancelled
This commit is contained in:
@@ -110,7 +110,7 @@ Install the client on macOS:
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -fsSL https://git.palav.dev/Palav/dosh/raw/branch/main/install.sh \
|
curl -fsSL https://git.palav.dev/Palav/dosh/raw/branch/main/install.sh \
|
||||||
| DOSH_REPO=https://git.palav.dev/Palav/dosh.git DOSH_SERVER=palav DOSH_HOST=git.palav.dev DOSH_PORT=50000 sh -s -- client
|
| DOSH_REPO=https://git.palav.dev/Palav/dosh.git DOSH_PORT=50000 sh -s -- client
|
||||||
```
|
```
|
||||||
|
|
||||||
Update an installed client later:
|
Update an installed client later:
|
||||||
@@ -130,21 +130,22 @@ verifies the archive before installing it.
|
|||||||
Install the client on Windows PowerShell:
|
Install the client on Windows PowerShell:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:DOSH_REPO="https://git.palav.dev/Palav/dosh.git"; $env:DOSH_SERVER="palav"; $env:DOSH_HOST="git.palav.dev"; $env:DOSH_PORT="50000"; irm https://git.palav.dev/Palav/dosh/raw/branch/main/install.ps1 | iex
|
$env:DOSH_REPO="https://git.palav.dev/Palav/dosh.git"; $env:DOSH_PORT="50000"; irm https://git.palav.dev/Palav/dosh/raw/branch/main/install.ps1 | iex
|
||||||
```
|
```
|
||||||
|
|
||||||
Attach:
|
Attach:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dosh palav
|
dosh user@server.example.com
|
||||||
```
|
```
|
||||||
|
|
||||||
Plain `dosh palav` opens a fresh terminal session. Use named sessions when you want
|
Plain `dosh user@server.example.com` opens a fresh terminal session. Use named
|
||||||
to reattach to the same persistent terminal from multiple clients:
|
sessions when you want to reattach to the same persistent terminal from multiple
|
||||||
|
clients:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dosh --session work palav
|
dosh --session work user@server.example.com
|
||||||
dosh --session logs palav
|
dosh --session logs user@server.example.com
|
||||||
```
|
```
|
||||||
|
|
||||||
Press `Ctrl-]` to detach the current client while leaving the server session alive.
|
Press `Ctrl-]` to detach the current client while leaving the server session alive.
|
||||||
@@ -170,7 +171,8 @@ UDP host from an SSH alias when `dosh_host` is not configured. To make that expl
|
|||||||
in Dosh's host config:
|
in Dosh's host config:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dosh import-ssh palav homelab
|
dosh import-ssh homelab
|
||||||
|
dosh homelab
|
||||||
```
|
```
|
||||||
|
|
||||||
Optional command extensions are just config-side startup shortcuts; Dosh has no
|
Optional command extensions are just config-side startup shortcuts; Dosh has no
|
||||||
@@ -184,12 +186,12 @@ command = "tm {args}"
|
|||||||
description = "Open the server-side tmux dashboard"
|
description = "Open the server-side tmux dashboard"
|
||||||
```
|
```
|
||||||
|
|
||||||
Then `dosh palav tm` sends `tm`, and `dosh palav tm dosh` sends `tm 'dosh'`.
|
Then `dosh homelab tm` sends `tm`, and `dosh homelab tm dosh` sends `tm 'dosh'`.
|
||||||
Remove that table to remove the integration. Hosts can override or opt out:
|
Remove that table to remove the integration. Hosts can override or opt out:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
# ~/.config/dosh/hosts.toml
|
# ~/.config/dosh/hosts.toml
|
||||||
[palav.extensions.tm]
|
[homelab.extensions.tm]
|
||||||
command = "/opt/tm/bin/tm {args}"
|
command = "/opt/tm/bin/tm {args}"
|
||||||
|
|
||||||
[other-host.extensions.tm]
|
[other-host.extensions.tm]
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ Dosh also calls `ssh -G <alias>` to infer the UDP target host when no `dosh_host
|
|||||||
configured. To write explicit Dosh host entries from SSH aliases:
|
configured. To write explicit Dosh host entries from SSH aliases:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dosh import-ssh palav homelab
|
dosh import-ssh homelab
|
||||||
```
|
```
|
||||||
|
|
||||||
This appends entries to `~/.config/dosh/hosts.toml` without trying to become an
|
This appends entries to `~/.config/dosh/hosts.toml` without trying to become an
|
||||||
@@ -112,12 +112,12 @@ command = "tm {args}"
|
|||||||
description = "Open the server-side tmux dashboard"
|
description = "Open the server-side tmux dashboard"
|
||||||
```
|
```
|
||||||
|
|
||||||
With that config, `dosh palav tm` runs `tm` in the remote Dosh shell and
|
With that config, `dosh homelab tm` runs `tm` in the remote Dosh shell and
|
||||||
`dosh palav tm dosh` runs `tm 'dosh'`. Removing the table removes the integration.
|
`dosh homelab tm dosh` runs `tm 'dosh'`. Removing the table removes the integration.
|
||||||
Host config can override a global extension, or disable it:
|
Host config can override a global extension, or disable it:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[palav.extensions.tm]
|
[homelab.extensions.tm]
|
||||||
command = "/opt/tm/bin/tm {args}"
|
command = "/opt/tm/bin/tm {args}"
|
||||||
|
|
||||||
[other-host.extensions.tm]
|
[other-host.extensions.tm]
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
# Dosh Release Evidence - 2026-06-20
|
# Dosh Release Evidence - 2026-06-20
|
||||||
|
|
||||||
Code benchmarked: `b44ff8e Improve release and benchmark tooling`
|
Runtime code benchmarked: `b44ff8e Improve release and benchmark tooling`
|
||||||
|
|
||||||
|
Release docs/default cleanup after that benchmark removed personal host aliases from
|
||||||
|
public examples and test fixtures; it did not change release runtime paths.
|
||||||
|
|
||||||
Environment:
|
Environment:
|
||||||
|
|
||||||
@@ -21,8 +24,8 @@ Artifacts:
|
|||||||
|
|
||||||
| artifact | sha256 |
|
| artifact | sha256 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `dosh-linux-x86_64.tar.gz` | `f421ee56aac61892c9e152d2ef018cf95eb35dec2ca1b2b5cc82eeb1fcc12911` |
|
| `dosh-linux-x86_64.tar.gz` | `cd77264d160fb87c6fd51009a6fbe826c9d2c00b23a57b4b3b98433af5a06b65` |
|
||||||
| `dosh-0.1.0-linux-x86_64.tar.gz` | `f421ee56aac61892c9e152d2ef018cf95eb35dec2ca1b2b5cc82eeb1fcc12911` |
|
| `dosh-0.1.0-linux-x86_64.tar.gz` | `cd77264d160fb87c6fd51009a6fbe826c9d2c00b23a57b4b3b98433af5a06b65` |
|
||||||
|
|
||||||
The installer verifies `<artifact>.sha256` when the sidecar is published.
|
The installer verifies `<artifact>.sha256` when the sidecar is published.
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -482,9 +482,9 @@ EOF
|
|||||||
fi
|
fi
|
||||||
cat >"$hosts_config" <<EOF
|
cat >"$hosts_config" <<EOF
|
||||||
# Example:
|
# Example:
|
||||||
# [palav]
|
# [homelab]
|
||||||
# ssh = "palav"
|
# ssh = "homelab"
|
||||||
# dosh_host = "palav.dev"
|
# dosh_host = "server.example.com"
|
||||||
# port = 50000
|
# port = 50000
|
||||||
# default_command = "tm"
|
# default_command = "tm"
|
||||||
# predict = true
|
# predict = true
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ dosh doctor homelab # host resolution, trust state, UDP reachability, server
|
|||||||
dosh sessions homelab # list live sessions
|
dosh sessions homelab # list live sessions
|
||||||
dosh trust homelab # fetch + pin the Dosh host key (via SSH fallback)
|
dosh trust homelab # fetch + pin the Dosh host key (via SSH fallback)
|
||||||
dosh trust --remove homelab
|
dosh trust --remove homelab
|
||||||
dosh import-ssh palav homelab # write a hosts.toml entry from an SSH alias
|
dosh import-ssh homelab # write a hosts.toml entry from an SSH alias
|
||||||
dosh update # update the installed client
|
dosh update # update the installed client
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+13
-13
@@ -4363,10 +4363,10 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parses_ssh_config_hostname() {
|
fn parses_ssh_config_hostname() {
|
||||||
let raw = "user palav\nhostname palav.dev\nport 22\n";
|
let raw = "user alice\nhostname server.example.com\nport 22\n";
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parse_ssh_config(raw).hostname,
|
parse_ssh_config(raw).hostname,
|
||||||
Some("palav.dev".to_string())
|
Some("server.example.com".to_string())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4389,9 +4389,9 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn parses_ssh_config_user_and_identity_files() {
|
fn parses_ssh_config_user_and_identity_files() {
|
||||||
let parsed = parse_ssh_config(
|
let parsed = parse_ssh_config(
|
||||||
"user palav\nidentityfile ~/.ssh/id_ed25519\nidentityfile ~/.ssh/work\n",
|
"user alice\nidentityfile ~/.ssh/id_ed25519\nidentityfile ~/.ssh/work\n",
|
||||||
);
|
);
|
||||||
assert_eq!(parsed.user, Some("palav".to_string()));
|
assert_eq!(parsed.user, Some("alice".to_string()));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
parsed.identity_files,
|
parsed.identity_files,
|
||||||
vec!["~/.ssh/id_ed25519".to_string(), "~/.ssh/work".to_string()]
|
vec!["~/.ssh/id_ed25519".to_string(), "~/.ssh/work".to_string()]
|
||||||
@@ -4478,37 +4478,37 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn detects_existing_imported_host_tables() {
|
fn detects_existing_imported_host_tables() {
|
||||||
assert!(raw_contains_host_table(
|
assert!(raw_contains_host_table(
|
||||||
"[palav]\nssh = \"palav\"\n",
|
"[homelab]\nssh = \"homelab\"\n",
|
||||||
"palav"
|
"homelab"
|
||||||
));
|
));
|
||||||
assert!(raw_contains_host_table("[\"home box\"]\n", "home box"));
|
assert!(raw_contains_host_table("[\"home box\"]\n", "home box"));
|
||||||
assert_eq!(toml_bare_key_or_quoted("palav"), "palav");
|
assert_eq!(toml_bare_key_or_quoted("homelab"), "homelab");
|
||||||
assert_eq!(toml_bare_key_or_quoted("home box"), "\"home box\"");
|
assert_eq!(toml_bare_key_or_quoted("home box"), "\"home box\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn strips_user_from_fallback_udp_host() {
|
fn strips_user_from_fallback_udp_host() {
|
||||||
assert_eq!(ssh_destination_host("palav@example.com"), "example.com");
|
assert_eq!(ssh_destination_host("alice@example.com"), "example.com");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parses_user_from_ssh_destination() {
|
fn parses_user_from_ssh_destination() {
|
||||||
assert_eq!(ssh_username("palav@example.com"), Some("palav".to_string()));
|
assert_eq!(ssh_username("alice@example.com"), Some("alice".to_string()));
|
||||||
assert_eq!(ssh_username("example.com"), None);
|
assert_eq!(ssh_username("example.com"), None);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn applies_host_config_user_to_plain_ssh_destination() {
|
fn applies_host_config_user_to_plain_ssh_destination() {
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
ssh_with_user("example.com", Some("palav")),
|
ssh_with_user("example.com", Some("alice")),
|
||||||
"palav@example.com"
|
"alice@example.com"
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
ssh_with_user("root@example.com", Some("palav")),
|
ssh_with_user("root@example.com", Some("alice")),
|
||||||
"root@example.com"
|
"root@example.com"
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
ssh_with_user("ssh://example.com", Some("palav")),
|
ssh_with_user("ssh://example.com", Some("alice")),
|
||||||
"ssh://example.com"
|
"ssh://example.com"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-10
@@ -1279,16 +1279,16 @@ mod tests {
|
|||||||
let second = host_public_key(&SigningKey::from_bytes(&[2u8; 32]));
|
let second = host_public_key(&SigningKey::from_bytes(&[2u8; 32]));
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
trust_host(&path, "palav", &first, "ssh", false).unwrap(),
|
trust_host(&path, "homelab", &first, "ssh", false).unwrap(),
|
||||||
TrustResult::Trusted
|
TrustResult::Trusted
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
trust_host(&path, "palav", &first, "ssh", false).unwrap(),
|
trust_host(&path, "homelab", &first, "ssh", false).unwrap(),
|
||||||
TrustResult::AlreadyTrusted
|
TrustResult::AlreadyTrusted
|
||||||
);
|
);
|
||||||
assert!(trust_host(&path, "palav", &second, "ssh", false).is_err());
|
assert!(trust_host(&path, "homelab", &second, "ssh", false).is_err());
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
trust_host(&path, "palav", &second, "ssh", true).unwrap(),
|
trust_host(&path, "homelab", &second, "ssh", true).unwrap(),
|
||||||
TrustResult::Trusted
|
TrustResult::Trusted
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1301,16 +1301,16 @@ mod tests {
|
|||||||
let second = host_public_key(&SigningKey::from_bytes(&[2u8; 32]));
|
let second = host_public_key(&SigningKey::from_bytes(&[2u8; 32]));
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
verify_known_host(&path, "palav", &first).unwrap(),
|
verify_known_host(&path, "homelab", &first).unwrap(),
|
||||||
KnownHostStatus::Unknown
|
KnownHostStatus::Unknown
|
||||||
);
|
);
|
||||||
trust_host(&path, "palav", &first, "ssh", false).unwrap();
|
trust_host(&path, "homelab", &first, "ssh", false).unwrap();
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
verify_known_host(&path, "palav", &first).unwrap(),
|
verify_known_host(&path, "homelab", &first).unwrap(),
|
||||||
KnownHostStatus::Trusted
|
KnownHostStatus::Trusted
|
||||||
);
|
);
|
||||||
assert!(matches!(
|
assert!(matches!(
|
||||||
verify_known_host(&path, "palav", &second).unwrap(),
|
verify_known_host(&path, "homelab", &second).unwrap(),
|
||||||
KnownHostStatus::Mismatch { .. }
|
KnownHostStatus::Mismatch { .. }
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -1625,8 +1625,8 @@ mod tests {
|
|||||||
protocol_version: NATIVE_PROTOCOL_VERSION,
|
protocol_version: NATIVE_PROTOCOL_VERSION,
|
||||||
client_random: [1u8; 32],
|
client_random: [1u8; 32],
|
||||||
client_ephemeral_public: [2u8; 32],
|
client_ephemeral_public: [2u8; 32],
|
||||||
requested_host: "palav".to_string(),
|
requested_host: "homelab".to_string(),
|
||||||
requested_user: "palav".to_string(),
|
requested_user: "alice".to_string(),
|
||||||
requested_session: "term".to_string(),
|
requested_session: "term".to_string(),
|
||||||
requested_mode: "read-write".to_string(),
|
requested_mode: "read-write".to_string(),
|
||||||
terminal_size: (80, 24),
|
terminal_size: (80, 24),
|
||||||
|
|||||||
+2
-2
@@ -291,8 +291,8 @@ mod tests {
|
|||||||
protocol_version: crate::native::NATIVE_PROTOCOL_VERSION,
|
protocol_version: crate::native::NATIVE_PROTOCOL_VERSION,
|
||||||
client_random: [1u8; 32],
|
client_random: [1u8; 32],
|
||||||
client_ephemeral_public: [2u8; 32],
|
client_ephemeral_public: [2u8; 32],
|
||||||
requested_host: "palav".to_string(),
|
requested_host: "homelab".to_string(),
|
||||||
requested_user: "palav".to_string(),
|
requested_user: "alice".to_string(),
|
||||||
requested_session: "term".to_string(),
|
requested_session: "term".to_string(),
|
||||||
requested_mode: "read-write".to_string(),
|
requested_mode: "read-write".to_string(),
|
||||||
terminal_size: (80, 24),
|
terminal_size: (80, 24),
|
||||||
|
|||||||
Reference in New Issue
Block a user