SSH
SSH
SSH 的全称是 Secure Shell,是一种用于远程登录、远程执行命令和安全传输文件的加密协议。
它最常见的用途是:在本地终端连接远程服务器,安全地执行命令、上传下载文件、做端口转发。和 Telnet、FTP 这类明文协议相比,SSH 会对认证过程和传输内容进行加密,因此更适合生产环境使用。
ssh 和 sshd 分别是什么
ssh
ssh 是客户端程序,用来从“本机”主动连接到远程主机。
例如你在自己的电脑上执行:
ssh user@192.168.1.10
此时本机运行的是 ssh,它会去连接对方机器上的 SSH 服务。
sshd
sshd 是服务端程序,全称通常指 OpenSSH Server 的 daemon(守护进程)。
它运行在被连接的那台机器上,负责监听 SSH 端口、校验账号或密钥、接受登录请求,并在认证成功后给用户分配远程会话。
可以简单理解为:
ssh:发起连接的一端。sshd:接收连接的一端。
如果把 SSH 看成“远程开门”,那 ssh 像是你手里的钥匙和开门动作,sshd 像是门锁和门禁系统。
SSH 常见认证方式
- 密码认证:输入远程主机账户密码登录。
- 公钥认证:本地持有私钥,远程主机保存对应公钥,通常更安全,也更适合自动化。
公钥认证里最常见的文件位置是:
- 本地私钥:
~/.ssh/id_rsa、~/.ssh/id_ed25519 - 远程公钥列表:
~/.ssh/authorized_keys
ssh 常见用法
1. 远程登录
ssh user@server
ssh user@192.168.1.10
2. 指定端口连接
ssh -p 2222 user@server
3. 指定私钥登录
ssh -i ~/.ssh/id_ed25519 user@server
4. 在远程主机执行单条命令
ssh user@server "hostname && whoami"
5. 配合 scp / sftp 传文件
scp ./local.txt user@server:/tmp/
sftp user@server
6. 端口转发
SSH 除了登录,还常被用来做隧道。
-
本地转发:把本机某个端口转到远程网络。
ssh -L 8080:127.0.0.1:80 user@server -
远程转发:把远程端口反向映射回本机。
ssh -R 9000:127.0.0.1:9000 user@server -
动态转发:把 SSH 当作 SOCKS 代理。
ssh -D 1080 user@server
这些功能很有用,但也正因为如此,SSH 常被合法运维和攻击者同时使用。
sshd 常见作用
sshd 在服务端通常负责这些事情:
- 监听默认端口
22 - 接收远程登录请求
- 验证密码、公钥、证书等认证信息
- 建立交互式 shell 会话
- 支持
scp、sftp、端口转发、远程命令执行 - 记录部分认证和会话日志,方便审计
本机出现哪些 ssh / sshd 特征,说明可能存在被入侵风险
下面这些现象不一定等于“已经被入侵”,但如果出现在不该出现的主机上,通常都值得马上排查。
1. 本机出现异常的 ssh 外连行为
- 你并没有主动连服务器,但本机持续存在
ssh进程。 ssh连接到了陌生公网 IP、异常地区 IP,或不熟悉的内网跳板机。ssh使用了-R、-D、-L等隧道参数,像是在做代理或反向通道。ssh由异常父进程拉起,例如 Web 服务、Office、脚本解释器、临时目录里的可执行文件。ssh频繁短时连接多个目标,像是在自动横向移动或回连控制端。
这类情况常见于攻击者利用 SSH 建立持久化通道、做代理、做数据外传,或者把本机当跳板机使用。
2. 本机不该提供远程登录,却出现了 sshd
- 这台电脑本来不是服务器,却安装、启动并长期运行了
sshd。 sshd被设置为开机自启,而你并没有这项需求。sshd监听在异常端口,或者同时监听多个可疑地址。- 进程名叫
sshd,但路径不正常,不在系统常见路径下。
如果一台普通办公终端突然开始对外提供 SSH 服务,这是很强的异常信号。
3. 认证配置被异常修改
~/.ssh/authorized_keys中多出了不认识的公钥。/etc/ssh/sshd_config被改动,例如开启了PermitRootLogin yes、启用了密码登录、放宽了来源限制。- 新增了陌生的 SSH 用户、系统账号或具备远程登录权限的账号。
- 本机的 SSH Host Key 被意外更换,且没有明确的运维原因。
这类变化常见于攻击者建立持久化后门,确保后续还能重新登录。
4. 登录日志或会话行为异常
- 出现大量 SSH 登录失败记录,说明正在被爆破或撞库。
- 出现来自陌生 IP 的成功登录,尤其是深夜、节假日、非办公地区。
- 成功登录的用户名很异常,例如测试账号、废弃账号、默认账号。
- 登录后很快执行提权、建用户、拉取脚本、下载工具、清日志等动作。
- 同一账号在短时间内从多个地区或多个来源地址登录。
这类信号通常意味着主机正处于被尝试入侵、已被接管,或者已经被用作横向移动节点。
5. SSH 相关文件异常增改
~/.ssh/config被加入陌生主机别名、代理跳转、自动私钥设置。known_hosts短时间内新增大量陌生主机指纹。- 私钥文件权限异常,或私钥被复制到临时目录、共享目录。
- 出现未知的脚本自动调用 SSH、SCP、SFTP 与外部主机通信。
这些现象说明本机可能被拿来做自动化回连、批量传输或跳板控制。
本机排查 SSH 风险时可以重点看什么
看进程
关注是否存在异常的 ssh、sshd 进程,以及它们的父进程、命令行参数、启动路径。
看网络
关注本机是否对外建立了异常 SSH 连接,或是否在本地监听了不预期的 SSH 端口。
看配置和密钥
重点检查:
~/.ssh/authorized_keys~/.ssh/config/etc/ssh/sshd_config~/.ssh/known_hosts- 私钥文件是否被异常创建、替换、复制
看日志
重点查看 SSH 登录失败、成功登录、来源 IP、登录时间、使用的用户名、会话后续行为。
一个简单判断思路
如果你的机器只是普通办公终端,通常更常见的是偶尔主动运行 ssh 去连远程服务器,而不是长期运行 sshd 对外提供服务。
因此可以先粗略这样判断:
- 看见本机主动运行
ssh:先判断是不是你本人在远程登录、传文件或开隧道。 - 看见本机在运行
sshd:先判断这台机器是否真的应该被别人远程登录。 - 看见陌生密钥、陌生来源 IP、异常隧道参数、异常自启动:入侵风险明显升高,应尽快排查。
一句话概括:ssh 更像“本机主动出去连别人”,sshd 更像“本机打开门让别人连进来”。如果它们的出现方式、启动来源、配置变化和网络行为不符合你的使用场景,就要高度怀疑本机存在被滥用或被入侵的风险。