一、什么是SSH服务?

SSH(Secure Shell)是一种安全的网络协议,用于在不安全的网络环境中(比如互联网)安全地访问远程服务器。它替代了早期不安全的Telnet、FTP等服务,通过加密传输数据,防止密码或命令被中间人窃取,是Linux服务器远程管理的标配工具。

二、为什么选择SSH?

  1. 安全性高:数据传输全程加密(默认使用AES、RSA等加密算法),防止密码泄露或会话劫持。
  2. 跨平台兼容:支持Windows、Mac、Linux等系统的客户端,可通过命令行或图形化工具(如Xshell、FinalShell)连接。
  3. 功能丰富:除了远程登录,还支持文件传输(SCP/SFTP)、端口转发、X11转发等高级功能。

三、SSH服务的组成

  • 服务端(sshd):运行在目标服务器上,负责监听22号端口(默认),处理客户端的连接请求,验证用户身份并提供服务。
  • 客户端(ssh):运行在本地设备上,通过命令行工具发起连接,如ssh命令用于远程登录,scp用于文件传输。

四、安装SSH服务(以常见Linux发行版为例)

1. Ubuntu/Debian系
# 安装SSH服务端(sshd)
sudo apt update && sudo apt install openssh-server -y

# 启动服务并设置开机自启
sudo systemctl enable --now sshd
2. CentOS/RHEL系
# 安装SSH服务端
sudo yum install openssh-server -y

# 启动服务并设置开机自启
sudo systemctl enable --now sshd
3. 验证服务状态
# 检查服务是否运行
sudo systemctl status sshd

# 查看端口是否监听(默认22端口)
sudo netstat -tuln | grep 22  # 或 ss -tuln | grep 22

五、客户端基础使用

1. 基本登录命令

格式:ssh 用户名@服务器IP
示例:

# 登录名为root的服务器,IP为192.168.1.100
ssh root@192.168.1.100

首次连接会提示确认主机密钥,输入yes并回车:

The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxx.
Are you sure you want to continue connecting (yes/no)? yes

然后输入目标服务器密码即可登录。

2. 进阶:免密登录(强烈推荐)

免密登录无需重复输入密码,通过密钥对验证身份,步骤如下:
1. 生成本地密钥对(仅需在客户端执行):

ssh-keygen -t ed25519  # 生成ED25519算法的密钥对(比RSA更安全)
# 一路回车,默认生成到 ~/.ssh/id_ed25519(私钥)和 id_ed25519.pub(公钥)
  1. 将公钥复制到目标服务器
ssh-copy-id 用户名@服务器IP  # 自动将公钥追加到目标服务器的~/.ssh/authorized_keys
# 首次执行会提示输入目标服务器密码,之后即可免密登录
  1. 免密登录验证
ssh 用户名@服务器IP  # 无需密码直接登录

六、服务端配置(sshd_config)

SSH服务的核心配置文件为/etc/ssh/sshd_config,修改后需重启服务生效:

sudo vim /etc/ssh/sshd_config  # 编辑配置文件

常用配置项说明
- Port 22:修改SSH端口(如改为2222,避免默认端口暴露风险),需同时在防火墙开放新端口。
- PermitRootLogin yes:是否允许root直接登录(不推荐!建议设为no,用普通用户+sudo提权)。
- PasswordAuthentication yes:是否允许密码登录(若用免密登录,可设为no)。
- AllowUsers 用户名:仅允许指定用户登录(如AllowUsers alice)。

修改后重启服务

sudo systemctl restart sshd

七、常见问题与解决

  1. 无法连接?检查以下步骤
    - 服务是否运行:sudo systemctl status sshd
    - 端口是否开放:sudo ufw status(Ubuntu)或sudo firewall-cmd --list-ports(CentOS)
    - 防火墙拦截:开放22端口(如sudo ufw allow 22)或新端口(如sudo ufw allow 2222

  2. 登录被拒绝?
    - 密码错误:检查用户名和密码是否正确。
    - 配置文件问题:PermitRootLogin设为yes但密码正确,需确认是否密码登录被禁用。

  3. 免密登录失败?
    - 权限问题:目标服务器~/.ssh目录权限应为700authorized_keys权限应为600
    - 公钥未正确复制:手动检查~/.ssh/authorized_keys是否包含公钥内容。

八、总结

SSH是Linux服务器远程管理的基石,掌握其安装、配置和使用是运维/开发必备技能。核心要点:
- 服务端安装后确保sshd运行正常。
- 客户端使用ssh命令快速登录,免密登录提升效率。
- 通过修改配置文件(端口、禁止root登录)增强安全性。

建议初学者从基础命令开始练习,逐步尝试免密登录和端口修改,遇到问题优先检查服务状态和防火墙,排查路径清晰化!

小夜