SSH 远程命令行访问
SSH Server 配置
Linux 系统
安装 SSH Server
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install openssh-server
# CentOS/RHEL
sudo yum install openssh-server openssh-clients
# Fedora
sudo dnf install openssh-server openssh-clients启动并启用 SSH
sudo systemctl start ssh # Ubuntu/Debian
# 或
sudo systemctl start sshd # CentOS/RHEL/Fedora
# 启用开机自启
sudo systemctl enable sshWindows 系统
Windows 10/11 和 Windows Server 2019+ 内置 OpenSSH,可直接启用:
- 打开 设置 > 应用和功能 > 可选功能
- 搜索 OpenSSH Server,点击安装
- 启动服务:按
Win+R输入services.msc,找到 OpenSSH SSH Server,设为自动启动
macOS 系统
macOS 默认启用 SSH。若需启用,请在系统偏好设置 > 共享 > 远程登录中启用。
确认 SSH 端口
SSH 的默认端口是 22,但如果您已修改配置,需要确认实际使用的端口。
查询 SSH 配置
# 查看 SSH 配置文件
cat /etc/ssh/sshd_config | grep -i "^port"
# 查看监听端口
netstat -tulnp | grep ssh
# 或
ss -tulnp | grep sshWindows 系统
按 Win+R 打开命令提示符,执行:
netstat -an|findstr :22|findstr LISTENING创建隧道
登录幻缘映射控制台,点击侧边栏的"创建隧道"选项:

选择带有 TCP 标识的节点,在隧道创建页填入你本地应用的 IP 地址 和 端口(默认为 22),远程端口 建议使用获取随机空闲端口功能:

信息填写完成后点击右侧创建隧道按钮,若提示 创建隧道成功 则隧道创建成功。
启动隧道
请您阅读 启动隧道教程 - 通用客户端 快速上手,本教程部分不再赘述。
日志中会出现一行 您可以使用 [xxx] 访问您的服务 的提示,您可以使用此地址进行 SSH 连接。
SSH 客户端连接
Linux/macOS
ssh -p <远程端口> username@<节点地址>
# 示例
ssh -p 12345 user@frp.example.comWindows (PowerShell/Command Prompt)
ssh -p <远程端口> username@<节点地址>
# 或使用 PuTTY
# 在 Host Name 输入:<节点地址>
# 在 Port 输入:<远程端口>常见 SSH 客户端
| 工具 | 平台 | 特点 |
|---|---|---|
| OpenSSH | 所有平台 | 命令行工具,强大灵活 |
| PuTTY | Windows | 图形化界面,易用 |
| Termius | 全平台 | 现代 UI,支持密钥管理 |
| MobaXterm | Windows | 功能丰富,支持 X11 转发 |
| iTerm2 | macOS | 强大的终端模拟器 |
SSH 密钥认证配置
生成密钥对
在客户端生成 SSH 密钥对:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""-t rsa:使用 RSA 算法(也可用-t ed25519获得更好的安全性)-b 4096:密钥长度为 4096 位-f:指定密钥文件位置-N "":空密码(可选,通常推荐设置密码)
上传公钥到服务器
ssh-copy-id -p <远程端口> username@<节点地址>
# 或手动上传
cat ~/.ssh/id_rsa.pub | ssh -p <远程端口> username@<节点地址> \
"mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"在服务器上禁用密码认证
编辑 /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config找到并修改以下行:
PasswordAuthentication no
PubkeyAuthentication yes重启 SSH 服务:
sudo systemctl restart ssh高级用法
通过 SSH 隧道访问内网服务
如果目标设备上运行了其他服务(如数据库、Web 应用),可通过 SSH 隧道安全地访问:
# 本地端口转发:本地访问本地 3306 端口时,通过 SSH 转发到目标设备的 3306 端口
ssh -p <远程端口> -L 3306:127.0.0.1:3306 username@<节点地址>
# 远程端口转发:目标设备上的应用可访问本地的服务
ssh -p <远程端口> -R 8080:127.0.0.1:8080 username@<节点地址>使用 SFTP 进行文件传输
# 连接到 SFTP 服务器
sftp -P <远程端口> username@<节点地址>
# 常用命令
put local_file # 上传文件
get remote_file # 下载文件
ls # 列出文件
cd path/to/directory # 切换目录或使用图形化 SFTP 客户端(如 FileZilla、WinSCP):
- 选择 SFTP 协议
- 输入主机地址、端口、用户名
- 如果配置了密钥认证,选择密钥文件
使用 SSH 配置简化连接
在 ~/.ssh/config 中添加:
Host myserver
HostName <节点地址>
Port <远程端口>
User username
IdentityFile ~/.ssh/id_rsa之后只需 ssh myserver 即可快速连接。
常见问题
连接超时或被拒绝
- 检查隧道是否运行正常
- 确认 SSH Server 在目标设备上正常运行
- 验证端口配置是否正确
- 查看防火墙是否阻止 SSH 连接
"Permission denied (publickey)"
- 检查公钥是否正确上传到服务器
- 验证
~/.ssh/authorized_keys文件权限(应为 600) - 确认
~/.ssh目录权限(应为 700) - 查看服务器 SSH 日志:
sudo tail -f /var/log/auth.log
"Connection reset by peer"
这通常表示连接被服务端或防火墙中断。排查步骤:
- 检查 SSH Server 是否崩溃(查看进程)
- 验证服务器磁盘空间和内存充足
- 检查网络稳定性
- 查看 SSH 日志获取更多信息
密钥认证不生效
- 确保在生成密钥对时使用了正确的路径
- 检查私钥文件权限(应为 600):
chmod 600 ~/.ssh/id_rsa - 使用
-v参数调试连接过程:ssh -v -p <端口> user@host - 在服务器 SSH 配置中确认启用了
PubkeyAuthentication yes
某些命令在远程执行异常
可能是环境变量差异导致的。使用完整路径指定命令:
ssh user@host /usr/bin/command arg1 arg2或在远程执行前设置环境变量:
ssh user@host "export PATH=$PATH && command"安全建议
定期审计
# 查看 SSH 登录历史
lastlog
# 查看当前登录用户
w
# 查看登录失败尝试
sudo grep "Failed password" /var/log/auth.log | tail -20配置 fail2ban 防止暴力破解
# 安装 fail2ban
sudo apt-get install fail2ban
# 启用 SSH 保护
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# 找到 [sshd] 部分,确保 enabled = true
sudo systemctl restart fail2ban修改默认端口(可选)
在 /etc/ssh/sshd_config 中:
Port 2222然后重启 SSH。连接时使用新端口:
ssh -p 2222 user@host定期更新
sudo apt-get update && sudo apt-get upgrade使用 SSH 密钥的密码保护
生成有密码保护的密钥:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
# 根据提示输入密码可使用 ssh-agent 避免每次输入密码:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
# 输入一次密码,后续连接无需重复输入