Skip to content
Skillv1.0.0

ssh

SSH 管理与安全

by chaterm(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from chaterm/terminal-skills (server/ssh/SKILL.md). Install upstream with npx skills add chaterm/terminal-skills --skill ssh. Copyright stays with the author.

SSH 管理与安全

概述

SSH 密钥管理、跳板机配置、端口转发、安全加固等技能。

基础连接

连接命令

# 基础连接
ssh user@hostname
ssh -p 2222 user@hostname           # 指定端口

# 执行远程命令
ssh user@hostname "command"
ssh user@hostname 'ls -la && df -h'

# 详细输出(调试)
ssh -v user@hostname
ssh -vvv user@hostname              # 更详细

配置文件

# ~/.ssh/config
Host myserver
    HostName 192.168.1.100
    User admin
    Port 22
    IdentityFile ~/.ssh/id_rsa_myserver

Host dev-*
    User developer
    IdentityFile ~/.ssh/id_rsa_dev

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    AddKeysToAgent yes

# 使用配置
ssh myserver

密钥管理

生成密钥

# 生成 RSA 密钥(推荐 4096 位)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 生成 Ed25519 密钥(推荐)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 指定文件名
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_work

# 修改密码
ssh-keygen -p -f ~/.ssh/id_rsa

部署公钥

# 方式1:ssh-copy-id
ssh-copy-id user@hostname
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostname

# 方式2:手动复制
cat ~/.ssh/id_ed25519.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

# 方式3:直接编辑
ssh user@hostname
echo "public_key_content" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

SSH Agent

# 启动 agent
eval "$(ssh-agent -s)"

# 添加密钥
ssh-add ~/.ssh/id_rsa
ssh-add -l                          # 列出已添加的密钥

# 转发 agent(跳板机场景)
ssh -A user@jumphost

端口转发

本地转发

# 将本地端口转发到远程
ssh -L local_port:target_host:target_port user@ssh_server

# 示例:访问远程 MySQL
ssh -L 3306:localhost:3306 user@dbserver
mysql -h 127.0.0.1 -P 3306

# 示例:访问内网服务
ssh -L 8080:internal.server:80 user@jumphost
curl http://localhost:8080

远程转发

# 将远程端口转发到本地
ssh -R remote_port:local_host:local_port user@ssh_server

# 示例:暴露本地服务
ssh -R 8080:localhost:3000 user@public_server
# 现在可以通过 public_server:8080 访问本地 3000 端口

动态转发(SOCKS 代理)

# 创建 SOCKS5 代理
ssh -D 1080 user@ssh_server

# 使用代理
curl --socks5 localhost:1080 http://example.com

后台运行

# 后台运行隧道
ssh -fNL 3306:localhost:3306 user@server

# -f 后台运行
# -N 不执行远程命令
# -L 本地转发

跳板机配置

ProxyJump(推荐)

# 命令行
ssh -J jumphost user@target

# 配置文件
Host target
    HostName 192.168.1.100
    User admin
    ProxyJump jumphost

Host jumphost
    HostName jump.example.com
    User jumper

ProxyCommand

# 配置文件
Host target
    HostName 192.168.1.100
    User admin
    ProxyCommand ssh -W %h:%p jumphost

安全加固

sshd_config 配置

# /etc/ssh/sshd_config

# 禁用密码登录
PasswordAuthentication no
ChallengeResponseAuthentication no

# 禁用 root 登录
PermitRootLogin no

# 限制用户
AllowUsers admin developer
AllowGroups sshusers

# 修改端口
Port 2222

# 限制登录尝试
MaxAuthTries 3
MaxSessions 5

# 空闲超时
ClientAliveInterval 300
ClientAliveCountMax 2

# 禁用不安全选项
X11Forwarding no
PermitEmptyPasswords no

应用配置

# 测试配置
sshd -t

# 重载配置
systemctl reload sshd

常见场景

场景 1:批量执行命令

# 使用 for 循环
for host in server1 server2 server3; do
    ssh $host "uptime"
done

# 使用 parallel-ssh
pssh -h hosts.txt -i "uptime"

场景 2:文件传输

# scp
scp file.txt user@host:/path/
scp -r dir/ user@host:/path/
scp user@host:/path/file.txt ./

# rsync over SSH
rsync -avz -e ssh source/ user@host:/dest/

场景 3:保持连接

# ~/.ssh/config
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    TCPKeepAlive yes

# 使用 autossh
autossh -M 0 -fN -L 3306:localhost:3306 user@server

故障排查

问题 排查方法
连接超时 检查网络、防火墙、端口
权限被拒绝 检查密钥权限 (600)、authorized_keys
Host key 变更 ssh-keygen -R hostname
Agent 转发失败 检查 AllowAgentForwarding
连接断开 配置 ServerAliveInterval
# 调试连接
ssh -vvv user@hostname

# 检查密钥权限
ls -la ~/.ssh/
# id_rsa: 600
# id_rsa.pub: 644
# authorized_keys: 600
# ~/.ssh: 700

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/chaterm-terminal-skills-ssh/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

chaterm-terminal-skills-ssh.ocm.jsonjson
{
  "ocm": "1",
  "id": "chaterm-terminal-skills-ssh",
  "kind": "skill",
  "name": "ssh",
  "description": "SSH 管理与安全",
  "publisher": "chaterm",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "general"
    ],
    "tags": [
      "skill-md",
      "server",
      "ssh",
      "security",
      "key",
      "tunnel",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "SSH 管理与安全"
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/chaterm/terminal-skills",
      "path": "server/ssh/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/chaterm/terminal-skills/blob/HEAD/server/ssh/SKILL.md",
      "key": "chaterm/terminal-skills/server/ssh/SKILL.md"
    }
  },
  "instructions": "# SSH 管理与安全\n\n## 概述\nSSH 密钥管理、跳板机配置、端口转发、安全加固等技能。\n\n## 基础连接\n\n### 连接命令\n```bash\n# 基础连接\nssh user@hostname\nssh -p 2222 user@hostname           # 指定端口\n\n# 执行远程命令\nssh user@hostname \"command\"\nssh user@hostname 'ls -la && df -h'\n\n# 详细输出(调试)\nssh -v user@hostname\nssh -vvv user@hostname              # 更详细\n```\n\n### 配置文件\n```bash\n# ~/.ssh/config\nHost myserver\n    HostName 192.168.1.100\n    User admin\n    Port 22\n    IdentityFile ~/.ssh/id_rsa_myserver\n\nHost dev-*\n    User developer\n    IdentityFile ~/.ssh/id_rsa_dev\n\nHost *\n    ServerAliveInterval 60\n    ServerAliveCountMax 3\n    AddKeysToAgent yes\n\n# 使用配置\nssh ",
  "cost": {
    "context_tokens": 959
  }
}

Fetch it by URL: GET /api/v1/registry/chaterm-terminal-skills-ssh/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.