CentOS 7上搭建和配置SSH服务器


SSH简介

SSH是一种以安全的方式提供远程登录的协议,也是目前远程管理linux系统的首选方式。 在此之前,一般用FTP或telnet来进行远程登录,但因为它们以明文的形式在网络中传输账号密码和数据信息,因此不安全。 sshd是基于ssh协议开发的一款远程管理服务程序。想要使用SSH协议来远程管理linux系统,就需要部署sshd服务程序。

实验前的准备:

  • 用克隆的方法,准备两台虚拟机。
  • 两台虚拟机需设置在同一个网络模式下,比如NAT模式。
  • 设置hostname和ip地址。nmtui
  • 用ping命令查看是否连接成功
  • 用Xshell远程登录。

两个安全验证方法:

  • 基于口令的验证--------用账户和密码来验证登录
  • 基于密钥的验证--------需在本地生成密钥对,将密钥对中的公钥上传至服务器,用私钥与服务器中的公钥比对。

  • sshd配置说明:/etc/ssh/sshd_config

image-20240204135848654

配置SSH服务器

1.安装OpenSSH服务器:在终端中运行以下命令来安装OpenSSH服务器:

yum install openssh-server

2.配置SSH服务器:编辑SSH服务器的配置文件sshd_config,可以使用vi或其他文本编辑器打开/etc/ssh/sshd_config文件:

vi /etc/ssh/sshd_config

3.修改配置文件:

  • 如果您希望允许密码登录,请确保以下行处于注释状态(行首添加#字符):
#PasswordAuthentication yes
  • 如果您只想允许密钥登录,请确保以下行为未注释状态(行首没有#字符):
PubkeyAuthentication yes
  • (可选)您还可以根据需要进行其他配置,例如更改端口号、禁用root用户登录等。

4.保存并退出配置文件: 在vi中按Esc键,然后输入:wq以保存文件并退出。

5.启动SSH服务器:运行以下命令以启动SSH服务器:

systemctl start sshd

6.配置开机自启动:如果您希望SSH服务器在系统启动时自动启动,可以运行以下命令:

systemctl enable sshd

请确保服务器的防火墙允许SSH连接(默认情况下,CentOS 7使用Firewalld),或者您需要手动打开SSH端口。

1.查看Firewalld状态:运行以下命令以检查Firewalld是否正在运行:

systemctl status firewalld

2.打开SSH端口:如果Firewalld正在运行,则需要将SSH端口添加到防火墙规则中。运行以下命令以将SSH端口(默认为22)打开:

firewall-cmd --add-port=22/tcp --permanent

如果您不想使用默认端口22,则需要将新端口添加到防火墙规则中,例如要使用端口2222,则需要运行以下命令:

firewall-cmd --add-port=2222/tcp --permanent

3.重启Firewalld服务:运行以下命令以使更改生效:

systemctl restart firewalld

禁用SSH密码登录,只允许密钥登录,可以按照以下步骤进行配置:

1.用root用户登录到SSH服务器。 2.编辑SSH服务器的配置文件sshd_config:运行以下命令使用vi或者其他编辑器打开/etc/ssh/sshd_config文件:

vim /etc/ssh/sshd_config

3.在文件中找到并修改以下行:

  • PasswordAuthentication行的值改为no
PasswordAuthentication no
  • 确保PubkeyAuthentication的值为yes
PubkeyAuthentication yes

4.保存并退出配置文件:在vi中按下 Esc 键,然后输入 :wq 保存文件并退出。

5.重新启动SSH服务器:运行以下命令以应用更改:

systemctl restart sshd

如果您希望禁用root用户登录SSH服务器,可以按照以下步骤进行配置:

1.用root用户登录到SSH服务器。

2.编辑SSH服务器的配置文件sshd_config:运行以下命令使用vi或者其他编辑器打开/etc/ssh/sshd_config文件:

vi /etc/ssh/sshd_config

3.在文件中找到并修改以下行:

  • PermitRootLogin行的值改为no
PermitRootLogin no

4.保存并退出配置文件:在vi中按下 Esc 键,然后输入 :wq 保存文件并退出。 5.重新启动SSH服务器:运行以下命令以应用更改:

systemctl restart sshd

修改配置文件,实现允许指定用户/用户组或者IP登录

允许指定用户进行登录(白名单)

在/etc/ssh/sshd_config 配置文件中设置AllowUsers选项,

在配置文件末尾添加行格式如下(例如允许用户tom通过192.168.8.30登录)。

AllowUsers tom@192.168.8.30

配置了指定用户或者用户组允许登录后,默认拒绝其他所有用户或者用户组。

禁止指定用户登录(黑名单)

在 /etc/ssh/sshd_config 配置文件中设置DenyUsers选项,

在配置文件末尾添加行格式如下(例如禁止用户lily登录)。

DenyUsers lily

上述修改需要重启sshd服务。

CentOS 6系列执行以下命令进行重启:

# service sshd restart

Centos 7/EulerOS系列执行以下命令进行重启:

# systemctl restart sshd

ssh免密钥登录

ssh免密登陆很简单,只需两步:

  1. 客户端生成公钥、私钥

  2. 将客户端公钥上传到服务器

1.客户端生成公私钥

本地客户端生成公私钥:(一路回车默认即可)

ssh-keygen

如上命令会在用户根目录下的.ssh文件夹下创建公私钥

cd ~/.ssh
ls
id_rsa (私钥)
id_rsa.pub (公钥)

2.上传公钥到服务器

这里测试用的服务器地址为:192.168.8.20,用户为:root

方式一:执行ssh-copy-id将客户端公钥上传到服务器:

ssh-copy-id  root@192.168.8.20

上面这条命令,就是将公钥写到了服务器上的.ssh/authorized_keys文件中。可以登录服务器后,查看该文件,可以在文件末尾看到客户端的公钥。因此,我们也可以直接将客户端公钥的内容直接拷贝到服务器上的.ssh/authorized_keys文件末尾,以实现相同的功能。

方式二:将客户端id_rsa.pub中的内容贴到~/.ssh/authorized_keys 文件末尾

cat ~/.ssh/authorized_keys

3.验证 -- 测试免密登录

客户端通过ssh连接远程服务器,就可以免密登录了。

ssh root@192.168.8.20

当然,你也可以再创建一个alias,让ssh登录更简单:

alias ssh_820='ssh  root@192.168.8.20'

此时,执行 ssh_820 命令就可以直接登录到服务器。

远程传输命令scp

scp是基于SSH协议在网络之间安全传输的命令。其格式是

  • 上传:“scp [参数] 本地文件 远程账户@远程IP地址:远程目录”
  • 下载:“scp [参数] 远程账户@远程IP地址:远程目录 本地目录”

scp将所有传输数据都进行加密处理

要以绝对路径的形式官写清楚文件的存放位置

如果是传整个文件,则额外添加参数-r进行递归操作。

免密登录:scp ~/.ssh/id_rsa.pub 192.168.10.1:/root/.ssh/authorized_keys

image-20240204140054628

scp命令将本机文件发送到其他主机

echo "Welcome to zuolaoshi.cn" > readme.txt
scp /root/readme.txt 192.168.8.20:/home
# root@192.168.8.20's password:此处输入远程服务器中root管理员的密码
readme.txt 100% 26 0.0KB/s 00:00

scp命令把远程主机上的文件下载到本地主机

scp 192.168.8.20:/etc/redhat-release /root
#  root@192.168.8.20's password:此处输入远程服务器中root管理员的密码
redhat-release 100% 52 0.1KB/s 00:00 

cat redhat-release