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服务器
yum install openssh-server

2.配置SSH服务器:
vi /etc/ssh/sshd_config

3.修改配置文件:
#允许密码登录,请确保以下行处于注释状态
#PasswordAuthentication yes

#只想允许密钥登录,请确保以下行为未注释状态
PubkeyAuthentication yes

4.重启SSH服务器
systemctl restart sshd

6.配置开机自启动
systemctl enable sshd

请确保服务器的防火墙允许SSH连接

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

2.打开SSH端口:如果Firewalld正在运行
firewall-cmd --add-port=22/tcp --permanent


3.如要使用端口2222,则需要运行以下命令:
firewall-cmd --add-port=2222/tcp --permanent

4.重启Firewalld服务:
systemctl restart firewalld

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

vim /etc/ssh/sshd_config

# 将`PasswordAuthentication`行的值改为`no`:
PasswordAuthentication no

# 确保`PubkeyAuthentication`的值为`yes`:
PubkeyAuthentication yes

# 退出重新启动SSH服务器
systemctl restart sshd

禁用root用户登录SSH服务器,

vi /etc/ssh/sshd_config

# 将`PermitRootLogin`行的值改为`no`:
PermitRootLogin no
# 退出重启
systemctl restart sshd

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

在/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
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