SSH Direct Access:远程安装 SSH + 免密登录 + 目录直操作
目标
- 确认目标机器可达且 SSH 可用;不可用时安装并启动 openssh-server
- 配置本机 → 目标机器的密钥免密登录
- 对指定远程目录提供标准操作命令(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?>
脚本行为:
- 本机无密钥则生成 ed25519 密钥(ssh-keygen,空口令)
- 安装公钥到远端
~/.ssh/authorized_keys(优先免密通道/sshpass/plink;Windows 走管道方式) - 无法自动输密码时:脚本会打印一条单条安装命令并以退出码 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;远端
~/.ssh700、authorized_keys600 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 | 操作命令模板与常见排障 |
微信扫一扫