← 返回 Skill 列表
extension
分类: 开发与工程API Key 暂未确认

SSH 免登与远程目录直操作

给指定远程机器安装/启用 OpenSSH 服务、配置 SSH 免密登录,并直接操作指定远程目录(列出/读取/写入/上传/下载/执行命令)。目标机器以 Linux 为主,本机支持 Windows(PowerShell) 与 Linux/macOS(bash)。

person作者: frank09hubOpenAPI

SSH Direct Access:远程安装 SSH + 免密登录 + 目录直操作

目标

  1. 确认目标机器可达且 SSH 可用;不可用时安装并启动 openssh-server
  2. 配置本机 → 目标机器的密钥免密登录
  3. 对指定远程目录提供标准操作命令(list / read / write / upload / download / run / exists)

输入(执行前从用户请求或上下文确认)

| 参数 | 说明 | 默认 | |---|---|---| | HOST | 目标机器地址(IP/域名) | 必填 | | DIR | 目标远程目录(绝对路径,如 /srv/data) | 必填 | | PORT | SSH 端口 | 22 | | USER | 远程登录用户 | 本机当前用户 | | PASSWORD | 初始密码(首次装钥用,可选) | 无 | | KEY | 本机私钥路径 | ~/.ssh/id_ed25519 |

执行流程

0. 选择脚本族(按本机 OS)

  • 本机 Windows:使用 scripts\*.ps1(PowerShell 执行)
  • 本机 Linux/macOS:使用 scripts/*.sh(bash 执行)
  • 两个脚本族参数顺序一致:<HOST> [PORT] [USER] [KEY] [PASSWORD?]

1. 检查现状(只读,先做)

scripts\check_ssh.ps1 <HOST> <PORT> <USER> <KEY>
bash scripts/check_ssh.sh <HOST> <PORT> <USER> <KEY>

按退出码分支:

  • 退出码 0(已免密):跳过安装与配钥,直接进入第 4 步
  • 退出码 10(需密码):执行第 2 步配钥
  • 退出码 4(端口不可达):执行第 3 步安装 SSH 服务

2. 配置免密(远程已有 SSH 但需密码)

scripts\setup_key_auth.ps1 <HOST> <PORT> <USER> <KEY> <PASSWORD?>
bash scripts/setup_key_auth.sh <HOST> <PORT> <USER> <KEY> <PASSWORD?>

脚本行为:

  1. 本机无密钥则生成 ed25519 密钥(ssh-keygen,空口令)
  2. 安装公钥到远端 ~/.ssh/authorized_keys(优先免密通道/sshpass/plink;Windows 走管道方式)
  3. 无法自动输密码时:脚本会打印一条单条安装命令并以退出码 11 返回。此时把命令交给用户在本机执行一次(输入一次密码),完成后重跑第 1 步验证;不要反复重试

3. 安装远程 SSH 服务(端口不可达时)

先确认 HOST/PORT/网络无误,再按远端发行版安装(经用户可用的登录方式):

  • Debian/Ubuntu:sudo apt-get update && sudo apt-get install -y openssh-server && sudo systemctl enable --now ssh
  • RHEL/CentOS/Rocky:sudo yum install -y openssh-server && sudo systemctl enable --now sshd
  • 防火墙放行:sudo ufw allow <PORT>/tcp(ufw);sudo firewall-cmd --permanent --add-port=<PORT>/tcp && sudo firewall-cmd --reload(firewalld)
  • 若远端完全无法建立任何通道(无控制台、无任何登录方式):标记阻塞,不猜测。将上述命令交给用户在目标机器控制台执行,或请用户提供可用登录凭证后继续

4. 目录直操作(交付目标)

验证目录存在:ssh -p <PORT> <USER>@<HOST> "ls -ld '<DIR>'" 之后统一用操作脚本:

scripts\remote_ops.ps1 <HOST> <DIR> <PORT> <USER> <action> [args...]
bash scripts/remote_ops.sh <HOST> <DIR> <PORT> <USER> <action> [args...]

| 动作 | 参数 | 说明 | |---|---|---| | exists | - | 目录是否存在且可访问(退出码 0/20) | | list | - | 列出目录内容(ls -la) | | read | <相对路径> | 输出远程文件内容 | | write | <相对路径> <本地文件> | 上传本地文件并落为远程文件(先传临时名再 mv) | | upload | <本地路径> | 上传本地文件/目录到 DIR 下 | | download | <远程相对路径> <本地目标> | 下载远程文件/目录到本地 | | run | <shell 命令> | 在 cd DIR && <命令> 下执行 |

操作模板与排障详见 references/ops.md。

安全与边界

  • HOST / USER / PORT / DIR / 相对路径均做字符白名单校验(脚本内置),防命令注入
  • 远程路径一律单引号包裹;上传/下载走 scp,不在远端 shell 手工展开
  • 本技能只改动:本机 ~/.ssh 与远端 ~/.ssh/authorized_keys;远端系统层面仅安装 openssh-server 相关包与放行端口,不做其他系统改动
  • 需要交互式密码的步骤先走脚本自动方式;失败则交给用户执行一次,不反复重试
  • 权限规范:本机私钥 600;远端 ~/.ssh 700、authorized_keys 600
  • run 动作执行的命令由使用者(Agent/用户)提供,属有意执行,使用前需自行确认命令安全性

脚本清单

| 文件 | 作用 | |---|---| | scripts/check_ssh.sh / check_ssh.ps1 | 只读检查:本机工具、端口连通、免密现状 | | scripts/setup_key_auth.sh / setup_key_auth.ps1 | 生成密钥并安装到远端,实现免密 | | scripts/remote_ops.sh / remote_ops.ps1 | 远程目录标准操作入口 | | references/ops.md | 操作命令模板与常见排障 |