SSH 入门指南:如何远程连接与管理 Linux 服务器

SSH 入门指南:如何远程连接与管理 Linux 服务器

目录

Toggle

客户端安装连接

SSH(Secure Shell)解决了与远程主机进行安全通信的两个基本问题:

认证远程主机的身份是否属实 (避免了「中间人」攻击);

加密本地主机与远程主机之间的所有通信;

SSH 由两部分组成:SSH 服务器和 SSH 客户端。前者在远程主机中运行,负责在端口 22(默认)上监听接入的连接;后者在本地主机中运行,用于同远程 SSH 服务器通信。

客户端

安装

在 Linux 上使用 APT 或 DNF 这样的包管理器安装方法如下:

# 使用 APT 安装

sudo apt update && sudo apt install openssh-client

# 使用 DNF 安装

sudo dnf install openssh-clients

连接

使用 `ssh

` 将会以当前用户名连接主机名上的 22 端口:

“`bash

# 指定用户名:

ssh root@1.1.1.1

# 指定用户名加端口

ssh -p 22 root@1.1.1.1

“`

在第一次连接到 SSH 服务端时,会看到这样的信息:

“`bash

The authenticity of host ‘192.168.1.3 (192.168.1.3)’ can’t be established.

ECDSA key fingerprint is SHA256:Wg4Fgm7xjLpOcLKYSg4WQMWu+ayZeucKBFjBP/jkNjw.

Are you sure you want to continue connecting (yes/no/[fingerprint])?

“`

一般来说与某台服务器的第一次连接时就会看到该提示,SSH 在提示这是一台陌生的服务器,你确定要连接吗?

– 输入 `yes` 确认,接着会要求输入正在登录的用户的密码;

– 想要中断连接,可以输入 `exit` 或按 `Ctrl` + `D`;

在输入 `yes` 确认后,会将当前服务器的指纹储存在本机的 `~/.ssh/known_hosts` 文件中,每台 SSH 服务器都有唯一的密钥用于客户端通信,而公钥的哈希值用于识别服务器,也就是「服务器指纹」。

### WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

“`bash

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the ECDSA key sent by the remote host is

SHA256:Q2tUbgjQjiDKqI5vTZi/w73tipV72MtgMvT47/GF5ao.

Please contact your system administrator.

Add correct host key in /home/toor/.ssh/known_hosts to get rid of this message.

Offending ECDSA key in /home/toor/.ssh/known_hosts:1

remove with:

ssh-keygen -f “/home/toor/.ssh/known_hosts” -R “192.168.1.3”

ECDSA host key for 192.168.1.3 has changed and you have requested strict checking.

Host key verification failed.

“`

「服务器指纹」用于防范恶意冒充远程主机,所以出现该消息的原因一般有两种:

1. 攻击者可能试图发起中间人攻击,这种情况很少见;

2. 更可能的原因是远程主机出现了变动。例如,重新安装了系统或 SSH 服务器、变更了 IP 或 MAC 地址等等;

在确认是你的操作(如重装服务器系统)导致的,就可以使用命令移除掉本机上关于该服务器的「服务器指纹」:

“`bash

# ssh-keygen -R

ssh-keygen -R 192.168.1.3

“`

然后再次连接即可

## 服务器

### 安装

大多数 Linux 发行版预装了来自 OpenBSD 项目的 OpenSSH,但有的可能安装了其中的客户端,如果想要在只安装了 SSH 客户端的系统上接受远程连接,就需要安装服务端并配置,并允许 TCP 端口 22 接受接入的网络连接:

“`bash

# 使用 APT 安装

sudo apt update && sudo apt install openssh-server

# 使用 DNF 安装

sudo dnf install openssh-server

# 运行 SSH 服务

sudo systemctl start sshd

# 设置 SSH 开机启动

sudo systemctl enable sshd

“`

通过 Systemd 检查 SSH 服务是否处于运行状态:

“`bash

systemctl status sshd

“`

“`bash

● ssh.service – OpenBSD Secure Shell server

Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)

Active: active (running) since Sat 2021-05-01 00:00:00 CST; 1min ago

Docs: man:sshd(8)

man:sshd_config(5)

Process: 430 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS)

Main PID: 433 (sshd)

Tasks: 1 (limit: 1091)

Memory: 7.4M

CPU: 163ms

CGroup: /system.slice/ssh.service

└─433 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

“`

可以看到「active (running)」

### 配置

SSH 服务端的配置文件位于 `/etc/ssh/sshd_config` (`ssh_config` 为 SSH 客户端配置文件)

在对配置文件进行修改前最好备份一下,然后再进行编辑:

“`bash

# 备份 SSH 服务端配置文件

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 编辑 SSH 服务端配置文件

sudo vim /etc/ssh/sshd_config

“`

配置文件中以 `#` 开头的便是注释信息,一般来说就是阐述功能作用的,除此之外还会对一些默认不启用的功能文本进行注释,让其不生效,若要生效就去掉其开头的 `#`。

在 VIM 中要修改文本,需要按 `I` 进入「插入模式」

「插入模式」返回「命令模式」可按 `esc`,然后使用其他功能,如查找功能:

– 查找功能按 `/` 自上而下搜索,按 `?` (`/` 键加上 `Shift`) 进行自下而上搜索;

– 在 `/` 或 `?` 后面跟上关键词,如 `/Port` 然后按回车键;

– 在按回车键后会查找相应关键词,按 `n` 查看下一个搜索结果,按 `N`(`N` 键加上 `Shift` 就是大写)查看上一个搜索结果;

#### 修改默认端口

在 `sshd_config` 输入 `/Port` 并回车查找:

“`bash

# Port 22

Port 2783

“`

将 `# Port 22` 前的 `#` 移除并修改 `22` 到其他随机端口

⚠️ 注意:有防火墙或者安全组的记得进行相应修改

#### 禁止 root 帐户直接登陆

允许 root 帐户登录 SSH 是不妥当的,但一般云服务器商给安装的系统默认都是 root 帐户登录,可以在拿到手后新建一个非特权帐户,日常使用非特权帐户登录 SSH,并禁用 root 帐户登录 SSH。

在 `sshd_config` 输入 `/PermitRootLogin` 并回车查找:

“`bash

PermitRootLogin yes

“`

如果是 `yes` 表明允许 root 帐户登录,将其修改为 `no` 也就是 `PermitRootLogin no` 即可

#### 仅允许特定用户

在 `sshd_config` 末尾另起一行:

“`bash

# AllowUsers <用户名>

# 如仅允许 ops 和 dev 用户登录

AllowUsers ops dev

“`

### 使用 Fail2Ban

Fail2ban 扫描日志文件(例如 `/var/log/apache/error_log`)并禁止显示恶意迹象的 IP,如自动化脚本尝试暴力破解 SSH 帐户密码的予以封禁

“`bash

# 使用 APT 安装

sudo apt update && sudo apt install fail2ban

# 使用 DNF 安装

sudo dnf install epel-release # 如果没有安装

sudo dnf install fail2ban

# 启动 Fail2Ban

sudo systemctl start fail2ban

# 开机运行

sudo systemctl enable fail2ban

“`

若要对 Fail2Ban 进行配置文件修改,不应该直接改动 `jail.conf` 与 `fail2ban.conf`:

“`bash

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local

“`

在 `jail.local` 中使用 `/sshd` 查找:

“`bash

sudo vim /etc/fail2ban/jail.local

“`

首先会找到关于 `[sshd]` 的注释内容,按 `N` 键往下翻会找到开头没有 `#` 的 `[sshd]`,在其下添加内容 `enabled = true` 并做一些修改:

“`bash

[sshd]

enabled = true

port = 2783 # 修改为自定义 SSH 端口,如果你修改了默认 SSH 端口

maxretry = 5 # 最大尝试次数

findtime = 300 # 在该时间段内超过 maxretry 次数则封禁,单位为秒

bantime = 86400 # 封禁时间,单位为秒

“`

修改好配置文件后重启服务让其生效:

“`bash

sudo systemctl restart fail2ban

“`

– – – – – –

**浏览「[Linux 专题](/more/special/linux/)」可查看更多内容**

相关推荐

兽音译者
约彩365彩票官方app下载安卓

兽音译者

📅 07-28 👁️ 1475
dnf为什么会被禁言
beta365官网app下载

dnf为什么会被禁言

📅 07-08 👁️ 1986
爸爸表情包图片
约彩365彩票官方app下载安卓

爸爸表情包图片

📅 07-14 👁️ 5579
网络营销师培训费用是多少?过来人跟你唠点大实话
365bet体育足球世界

网络营销师培训费用是多少?过来人跟你唠点大实话

📅 07-24 👁️ 1211