配置和保护SSH

使用SSH访问远程命令行

描述Secure Shell

SSH(Secure Shell) 是一种网络协议,用于在不安全的网络上安全地进行系统管理和数据传输。它最初由 Tatu Ylönen 于1995年设计,并成为保护网络服务免受攻击的标准。SSH提供了多种功能,包括远程登录、命令执行、文件传输和端口转发。

Secure Shell示例

使用root用户远程登录;

使用exit命令可以注销远程系统。

[root@hcss-ecs-huawei ~]# exit
logout
Connection to 1.94.13.218 closed.
[root@servera ~]#

 使用普通用户远程登录;

识别远程用户

w命令可以显示当前登录系统的用户列表。它还显示远程系统位置和用户运行的命令。

 

严格的主机密钥检查

StrictHostKeyChecking参数在用户特定的~/.ssh/config文件或系统范围内的/etc/ssh/sshd_config文件中设置。或者通过指定ssh命令的-o StrictHostKeyChecking=选项来设置。

如果 StrictHostKeyChecking参数设置为yes,则ssh命令会在公钥不匹配的情况下始终中断SSH连接。

如果 StrictHostKeyChecking参数设置为no,则ssh命令将启用连接并将目标主机的密钥添加到~/.ssh/known_hosts文件。

SSH已知主机密钥管理

有关已知远程系统及其密钥的信息存储在以下任一位置:

  • 系统范围的/etc/ssh/ssh_known_hosts文件;
  • 每个用户的主目录中的~/.ssh/known_hosts文件。
[root@servera ~]# cat ~/.ssh/known_hosts
1.94.13.218 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIVQneajIfzXxzxwfgHPFu+rixWH7ll/Oxl3N7UMyuan
1.94.13.218 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLyCtDY9KkbQ/t5jwp63LyYHY9CptamUFV2pTlQQh2Geu7
HrMMQ7aDBv5mLCaHazxu15Ka3rBuykP77qy7po2ko=

每个已知主机密钥条目包含一行,其中有三个字段:

  • 第一个字段是共享该公钥的主机名和IP地址的列表;
  • 第二个字段是公钥的加密算法;
  • 最后一个字段是公钥本身。

主机密钥问题故障排除

如果远程系统的IP地址或公钥发生更改,并且您尝试再次通过SSH连接该系统,则SSH客户端会检测到~/.ssh/known_hosts文件中用于该系统的密钥条目不再有效。系统会显示一条警告消息,指出远程主机表示已更改,您必须修改密钥条目。

解决办法:

如果是从Windows终端使用xshell或其他远程工具连接Linux服务器,请按照以下路径找到.ssh文件夹C:\Users\\.ssh,将known_hosts中的主机旧条目删除。

如果是Linux客户端登录Linux服务器出现以上类似的情况,请使用ssh-keygen -R remotesystemname -f ~/.ssh/known_hosts进行操作。

配置基于SSH密钥的身份验证

SSH密钥生成

使用ssh-keygen命令创建一个密钥对。默认情况下,ssh-keygen命令将您的私钥和公钥保存在~/.ssh/id_rsa和~/.ssh/id_rsa.pub文件中。

使用ssh-keygen -t rsa -b 2048 命令在 Linux 中用于生成一个 2048 位的 RSA 密钥对。

 

ssh-keygen:这是一个用于创建新的认证密钥对的命令行工具。它是 OpenSSH 套件的一部分。

-t rsa:指定要生成的密钥类型为 RSA(Rivest-Shamir-Adleman)。RSA 是一种常见的公钥加密算法,广泛用于 SSH 和其他安全协议。

-b 2048:指定密钥长度为 2048 位。密钥长度越长,安全性越高,但计算复杂度也增加。2048 位是目前被认为安全且性能良好的常用长度。

可以选择向ssh-keygen提供密语,用于加密私钥。一旦设置了密语,则每次使用私钥时都必须输入密语。

 

ssh-keygen命令-f选项指定用于保存密钥的文件。

共享公钥

ssh-copy-id命令可将SSH密钥对的公钥复制到远程系统上。可以使用ssh-copy-id命令指定特定的公钥,或使用默认的~/.ssh/id_rsa.pub文件。

 

如果配置了密语来保护私钥,SSH将在第一次使用时请求密语。但是,如果密钥身份验证成功,则不会要求您输入帐户的密码。

SSH客户端配置

SSH 客户端配置文件位于 ~/.ssh/config。如果该文件不存在,可以创建它。

vim ~/.ssh/config

 在配置文件中,可以为不同的远程服务器添加不同的配置项。以下是一个示例配置:

Host myserver
    HostName 192.168.72.10
    User root
    Port 22
    IdentityFile ~/.ssh/id_rsa
    StrictHostKeyChecking yes
    UserKnownHostsFile ~/.ssh/known_hosts

Host:给远程服务器起一个别名(例如 myserver),以后可以用这个别名来连接服务器。

HostName:远程服务器的 IP 地址或域名。

User:用于连接的用户名。

Port:SSH 服务监听的端口,默认为 22。

IdentityFile:私钥文件路径。

StrictHostKeyChecking:启用严格的主机密钥检查。

UserKnownHostsFile:指定已知主机文件的路径。

自定义OpenSSH服务配置

禁止超级用户进行登录

在生产环境中,一般不会以root用户身份进行远程登录,这样会有很大的安全风险。

OpenSSH服务器使用/etc/ssh/sshd_config文件中的PermitRootLogin配置设置,以允许或禁止用户以root身份登录系统。

PermitRootLogin  yes

当PermitRootLogin参数设置为yes时(默认设置),用户被允许以root用户身份登录系统。要防止这种情况,可将该值设置为no。

禁止将基于密码的身份验证用于SSH

为了提高 SSH 连接的安全性,可以禁用基于密码的身份验证,强制使用基于公钥的身份验证。这可以防止攻击者通过暴力破解密码来访问你的服务器。

打开 /etc/ssh/sshd_config 文件进行编辑:

vim /etc/ssh/sshd_config

找到以下配置项,并确保它们的值如下:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

确保 PubkeyAuthentication 是启用的:

PubkeyAuthentication yes

保存并关闭文件后,重启 SSH 服务使配置生效:

 systemctl restart sshd

相关推荐

  1. 【RHCSA问答题】第十章 配置保护SSH

    2024-07-18 18:52:03       36 阅读
  2. Ubuntu安装配置ssh教程

    2024-07-18 18:52:03       53 阅读
  3. Ubuntu中安装配置SSH的完全指南

    2024-07-18 18:52:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 18:52:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 18:52:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 18:52:03       62 阅读
  4. Python语言-面向对象

    2024-07-18 18:52:03       72 阅读

热门阅读

  1. 100亿美元,得物估值到顶了吗?

    2024-07-18 18:52:03       21 阅读
  2. 3 WebAPI

    3 WebAPI

    2024-07-18 18:52:03      21 阅读
  3. Python--文件读写

    2024-07-18 18:52:03       23 阅读
  4. 【人工智能】生成式AI的未来发展方向探讨

    2024-07-18 18:52:03       21 阅读
  5. C语言 goto语句

    2024-07-18 18:52:03       20 阅读
  6. llama-cpp-python

    2024-07-18 18:52:03       23 阅读
  7. sqlalchemy定期保持mysql连接活跃

    2024-07-18 18:52:03       21 阅读
  8. 如何处理客户暗战

    2024-07-18 18:52:03       20 阅读
  9. 数据库:SQL 函数有哪些?

    2024-07-18 18:52:03       25 阅读