Skip to main content

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 会话
  • 支持 scpsftp、端口转发、远程命令执行
  • 记录部分认证和会话日志,方便审计

本机出现哪些 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 风险时可以重点看什么

看进程

关注是否存在异常的 sshsshd 进程,以及它们的父进程、命令行参数、启动路径。

看网络

关注本机是否对外建立了异常 SSH 连接,或是否在本地监听了不预期的 SSH 端口。

看配置和密钥

重点检查:

  • ~/.ssh/authorized_keys
  • ~/.ssh/config
  • /etc/ssh/sshd_config
  • ~/.ssh/known_hosts
  • 私钥文件是否被异常创建、替换、复制

看日志

重点查看 SSH 登录失败、成功登录、来源 IP、登录时间、使用的用户名、会话后续行为。

一个简单判断思路

如果你的机器只是普通办公终端,通常更常见的是偶尔主动运行 ssh 去连远程服务器,而不是长期运行 sshd 对外提供服务。

因此可以先粗略这样判断:

  • 看见本机主动运行 ssh:先判断是不是你本人在远程登录、传文件或开隧道。
  • 看见本机在运行 sshd:先判断这台机器是否真的应该被别人远程登录。
  • 看见陌生密钥、陌生来源 IP、异常隧道参数、异常自启动:入侵风险明显升高,应尽快排查。

一句话概括:ssh 更像“本机主动出去连别人”,sshd 更像“本机打开门让别人连进来”。如果它们的出现方式、启动来源、配置变化和网络行为不符合你的使用场景,就要高度怀疑本机存在被滥用或被入侵的风险。