一文掌握 SSH:密码登录 → 密钥免密;Ubuntu 与 Windows 双平台;内网 NAS、公网服务器通用;安全与排障全覆盖。
合规与安全提示
仅在你合法拥有或获授权的设备与账号上操作。为防止暴露管理入口,请使用强口令/密钥、限制来源 IP、启用防火墙与自动安全更新。
SSH 基础与内/外网区别
SSH 是什么? 安全的远程登录与执行协议,默认端口 22。
内网连接:同一局域网(如家用路由 192.168.x.x/10.x.x.x 网段)下,用目标设备的内网 IP / 主机名直连。
公网连接:连接云服务器或对外暴露的主机,用公网 IP / 已解析的域名直连。
关键名词:
用户名:远程系统的账户名(如nick、admin)。主机:IP 或域名(如192.168.50.10/server.example.com)。端口:默认 22,如有变更,用-p指定。
在内网通过 SSH 连接(以 NAS 为例)
获取 NAS 内网 IP:在路由器或 NAS 控制台查看(示例:
192.168.50.10)。启用 SSH 服务(以群晖为例):DSM → 控制面板 → 终端机与 SNMP → 勾选 启用 SSH(默认端口 22,可自定义)。
从同一局域网的电脑发起连接:参照后续章节中的 Ubuntu/Windows 命令。
提示:尽量给 NAS 设固定 IP或 DHCP 地址保留,避免 IP 变化导致连接失败。
连接公网服务器(ECS 等)
确认公网 IP 与 开放端口:在云平台安全组/防火墙中放行 22/TCP(或你的自定义端口)。
初次登录:使用云平台分配的用户名(常见:
root/ubuntu/ec2-user等)与 IP/域名发起连接。安全建议:上线后尽快改端口、配置密钥免密、限制来源 IP、关闭密码登录。
Ubuntu:先用密码登录
# 基本格式
ssh 用户名@主机IP
# 示例:连接内网 NAS
ssh nick@192.168.50.10
# 自定义端口(如 2222)
ssh -p 2222 nick@192.168.50.10
# 公网服务器
ssh root@203.0.113.10
首次连接会询问是否信任该主机指纹,输入
yes。之后输入账户密码即可进入远程 Shell。
常用:
复制文件到远程:
scp local.txt nick@192.168.50.10:/home/nick/
- 从远程取回文件:
scp nick@192.168.50.10:/home/nick/log.txt ./log.txt
Windows:先用密码登录
# 在 PowerShell 中使用,或者 win + r 输入cmd 进入命令行界面
ssh 用户名@主机
# 示例:连接内网 NAS
ssh nick@192.168.50.10
# 指定端口
ssh -p 2222 nick@192.168.50.10
# 公网服务器
ssh Administrator@203.0.113.10 # Windows Server 典型
ssh root@203.0.113.10 # Linux 典型
首次连接同样需接受主机提示,随后输入密码。
文件传输(scp)在 PowerShell 也可用,语法与 Linux 相同。
Ubuntu:配置密钥免密登录
生成密钥对
# 生成 Ed25519 密钥,-C 为注释(便于标识)
ssh-keygen -t ed25519 -C "nick@laptop"
# 默认保存在 ~/.ssh/id_ed25519 与 ~/.ssh/id_ed25519.pub
# 强烈建议为私钥设置 passphrase
安装公钥到目标主机
方式 A:ssh-copy-id(最省心)
ssh-copy-id -i ~/.ssh/id_ed25519.pub nick@192.168.50.10
方式 B:手动追加(pub文件)
# 将公钥内容追加到目标主机用户家目录的 authorized_keys, 路径一般为(换行添加一条记录)
/root/.ssh/authorized_keys
群晖注意:公钥路径为/var/services/homes/<用户名>/.ssh/authorized_keys(权限:~/.ssh 700,authorized_keys 600)。
对于一般用户而言,直接在路径/volume1/homes/<用户名>/.ssh/authorized_keys,即可配置。
配置 ~/.ssh/config(别名与默认项)
在ubantu系统内,在路径:~/.ssh/config, 填入以下内容(路径和密钥文件填写你自己的),
Host nas
HostName 192.168.50.10 # nas主机
User nick # 账户名
Port 22
IdentityFile ~/.ssh/id_ed25519
Host aliyun
HostName 203.0.113.10 # 公网服务器
User root # 账户名
Port 22
IdentityFile ~/.ssh/id_ed25519
Host prod
HostName server.example.com
User ubuntu # 账户名
Port 22
IdentityFile ~/.ssh/id_ed25519
之后在ubantu的终端输入以下的命令即可ssh连接到对应主机:
ssh nas
ssh prod
ssh aliyun
Windows:配置密钥免密登录
生成密钥对
# 在 PowerShell 中生成 Ed25519
ssh-keygen -t ed25519 -C "nick@winpc"
# 默认保存到 C:\Users\<你的用户名>\.ssh\
安装公钥到目标主机
方式 A:scp 复制后手动追加
# 将公钥复制到远程的临时位置
scp $env:USERPROFILE\.ssh\id_ed25519.pub nick@192.168.50.10:/tmp/id.pub
# 在远程上追加(在 PowerShell 中执行时会进入交互输入密码)
ssh nick@192.168.50.10 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat /tmp/id.pub >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys && rm /tmp/id.pub"
方式 B:手动追加
# 将公钥内容追加到目标主机用户家目录的 authorized_keys, 路径一般为(换行添加一条记录)
/root/.ssh/authorized_key
配置 C:\Users\你的用户名\.ssh\config
生成密钥对
在windows系统内,在路径:C:\Users\你的用户名\.ssh\config, 填入以下内容(路径和密钥文件填写你自己的),
Host nas
HostName 192.168.50.10 # nas主机
User nick # 账户名
Port 22
IdentityFile ~/.ssh/id_ed25519
Host aliyun
HostName 203.0.113.10 # 公网服务器
User root # 账户名
Port 22
IdentityFile ~/.ssh/id_ed25519
Host prod
HostName server.example.com
User ubuntu # 账户名
Port 22
IdentityFile ~/.ssh/id_ed25519
之后在windows的命令行界面(win + r 输入 cmd)输入以下的命令即可ssh连接到对应主机:
ssh nas
ssh prod
ssh aliyun
进阶与安全加固
更改默认端口:在服务器的
sshd_config中将Port 22改为高位端口(配合防火墙/安全组放行)。限制来源 IP:仅允许固定办公/家庭出口 IP 访问;或使用 VPN / Zero Trust。
关闭密码登录:密钥验证稳定后,在
sshd_config中设置PasswordAuthentication no。禁用 root 直登:改为普通用户 +
sudo。
备份与轮换:定期更换密钥,吊销遗失设备的公钥。
通过服务器中转实现ssh登录到nas
这个功能需要nas端开启frpc,服务器端开启frps,开启方式参见 用 FRP 实现中转:阿里云 ECS 搭建 frps + NAS 作为 frpc(含安全组与 systemd)
在windows或者ubantu的相应config配置文件内(具体目录见前面),填入以下内容(路径和密钥文件填写你自己的):
Host nas_frp
HostName 203.0.113.10 # 公网服务器
Port 16688 # 服务器开放的端口
User nick # nas的用户名
IdentityFile ~/.ssh/id_rsa_host_nas_frp # 相应的密钥文件应该放在nas的相应目录
IdentitiesOnly yes
之后在windows的命令行界面(win + r 输入 cmd)或者ubantu的终端输入以下的命令即可ssh连接到对应nas:
ssh nas_frp
主机指纹不匹配
假设你之前配置过该记录,现在更改了密钥,ssh连接时可能会出现报错,此时删除本地缓存即可,假设记录为nas_frp,那么删除命令为:
ssh-keygen -R 公网ip
之后再次执行ssh连接即可
常见问题排障(FAQ)
卡在“连接超时/拒绝连接”:目标主机是否开启 SSH?端口是否开放(安全组/防火墙)?本地能否
ping通?提示“Host key verification failed”:远程主机指纹变化(例如重装系统/换机);核实无异常后删除本地
~/.ssh/known_hosts中相应条目再连。输入密码总是失败:用户名是否正确?是否支持密码登录?是否被 Fail2ban/策略锁定?
密钥免密失败:检查公钥是否追加到正确用户的
authorized_keys;权限是否正确;服务器是否允许PubkeyAuthentication yes。连接 NAS 不稳定:为 NAS 固定内网 IP;在交换机/路由器上开启 DHCP 保留;避免 Wi-Fi 质量波动。
外网访问内网 NAS:建议基于 VPN/反向隧道(如 frp/Tailscale/ZeroTier),而非直接映射 22 端口到公网。


