Metadata-Version: 2.1
Name: newssh
Version: 0.1.0
Summary: 一个交互式的SSH配置管理器, 支持加密存储密码, 支持windows、macos、linux
Keywords: ssh,terminal,cli,server-manager
Author: jiaosenvip
Author-Email: jiaosenvip <jiaosenvip@163.com>
License: MIT
Classifier: Environment :: Console
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: System :: Networking
Project-URL: Homepage, https://pypi.org/project/newssh/
Requires-Python: >=3.10
Requires-Dist: cryptography>=42.0.0
Requires-Dist: rich>=13.7.0
Requires-Dist: paramiko>=3.4.0; sys_platform == "win32"
Description-Content-Type: text/markdown

# newssh

`newssh` 是一个轻量的 SSH 连接管理器。它可以读取已有的 SSH 配置，也可以为常用服务器保存独立配置；密码会在本机加密保存，连接时自动完成认证。

## 安装

需要 Python 3.10 或更高版本。推荐从 PyPI 安装：

```bash
python -m pip install newssh
```

Linux 和 WSL 连接时使用系统的 `ssh` 命令，请先安装 OpenSSH 客户端。Windows 使用 Paramiko，不需要额外安装 `sshpass`、`pty` 或 `termios`。

## 快速开始

### 使用交互式菜单

直接运行 `newssh`，使用方向键选择连接：

- **Enter**：连接当前服务器
- **↑ / ↓**：选择服务器
- **← / →**：切换页面
- **s**：刷新当前页的端口可达状态
- **a**：添加服务器
- **r**：删除由 newssh 创建的服务器配置
- **q**：退出

```bash
newssh
```

程序会读取本机 SSH 配置中的普通 `Host` 条目，以及 newssh 自己保存的配置。Linux/WSL 默认读取 `~/.ssh/config`；Windows 默认读取 `%USERPROFILE%\\.ssh\\config`。带有 `*`、`!` 或 `?` 的通配 Host 条目不会作为独立连接显示。

### 使用命令行

添加配置时会隐藏密码输入：

```bash
newssh add prod --host 192.168.1.10 --user root
newssh list
newssh connect prod
newssh remove prod
```

如果同名配置已经存在，添加时需要显式指定 `--force` 才会覆盖：

```bash
newssh add prod --host 192.168.1.11 --user root --force
```

也可以指定端口和私钥。`--no-password` 表示不保存 SSH 密码；如果公钥认证失败，连接时仍会询问密码，但不会保存这次输入：

```bash
newssh add staging \
  --host example.com \
  --user deploy \
  --port 2222 \
  --identity ~/.ssh/id_ed25519 \
  --no-password
```

Windows PowerShell 中可使用相同命令；请把私钥路径改为 Windows 路径，例如 `C:\\Users\\you\\.ssh\\id_ed25519`。

## 认证方式

连接时会优先尝试公钥认证，包括配置中指定的私钥、本机默认私钥和 ssh-agent。公钥认证失败后：

- 如果配置中保存了密码，newssh 会自动尝试该密码；
- 如果没有保存密码，newssh 会在终端中询问密码，并在成功后加密保存；
- 如果使用了 `--no-password`，输入的密码不会保存。

首次连接服务器时，newssh 不会静默接受未知的 SSH 主机密钥。请先使用系统 SSH 客户端连接并核对指纹，将确认过的主机密钥写入 `known_hosts` 后再使用 newssh；Windows 也会读取 Paramiko/OpenSSH 可用的系统主机密钥，并拒绝未知主机。

## 数据和密码安全

默认情况下，newssh 在用户目录下创建 `.newssh`：

- `profiles.json`：服务器连接配置；
- `secrets.json`：使用 Fernet 加密的密码；
- `master.key`：用于解密密码的本机密钥。

可以通过 `NEWSSH_DATA_DIR` 指定其他数据目录：

```bash
NEWSSH_DATA_DIR=/path/to/newssh-data newssh
```

Windows PowerShell：

```powershell
$env:NEWSSH_DATA_DIR = "C:\\Users\\you\\newssh-data"
newssh
```

newssh 不要求用户额外输入主密码，因此解密密钥也保存在本机。请保护好当前操作系统账户和数据目录；删除或丢失 `master.key` 后，已经保存的密码无法恢复。不要把 `.newssh` 目录提交到代码仓库或共享给其他用户。

## 常用命令

```text
newssh                 打开交互式菜单
newssh add ...         添加配置
newssh list            列出配置（也可使用 ls）
newssh connect NAME    连接服务器（也可使用 c）
newssh remove NAME     删除配置（也可使用 rm）
newssh --help          查看帮助
```

Linux/WSL 下，`connect` 后的其他参数会继续传给系统 `ssh`，例如：

```bash
newssh connect prod -L 8080:localhost:8080
```

Windows 下使用 Paramiko 连接，目前不支持在 `connect` 后追加额外 SSH 参数；请把端口、用户名和私钥等信息写入配置。
