Linux 系统 SSH 和 SCP 服务器搭建、配置、访问以及出现的问题

2023-12-13 06:46:51

?SSH是Secure Shell的缩写,是一种网络协议,用于通过本地或远程网络在计算机上进行远程登录和命令操作。SSH 是 Telnet 协议的演变:正如其名称所描述的,SSH 是安全的,并对通过网络传输的数据进行加密。

SSH 是目前较为可靠,转为远程登录会话和其他网络服务提供的安全协议。SSH 常用于远程登录,远程拷贝文件等。使用 SSH 连接远程服务器,服务器端要安装 SSH 服务器并开启服务,客户端安装对应的 SSH 客户端。

本文章将介绍如何在 Ubuntu 20.04 上安装并启用 SSH 服务器

环境:

 Ubuntu 22.04.2 LTS (GNU/Linux 5.15.0-76-generic x86_64)

一、前言

为了在 Ubuntu 20.04 上安装 SSH 服务器,您需要在服务器上拥有 sudo 权限。

默认情况下,即使是最低配置,您的主机上也应该已经安装了 SSH 。

要检查情况是否确实如此,您可以运行带有“-V”选项的“ssh”命令。

ssh -V

请注意:ssh的版本信息并不意味着服务器上正在运行 SSH 服务器,它仅意味着您当前能够作为客户端连接到 SSH 服务器。

让我们看看如何在主机上安装 OpenSSH 服务器

二、SSH服务器搭建和配置

1、确保您当前的软件包是最新的

sudo apt-get update

2、?安装 SSH 服务器

sudo apt-get install openssh-server

2.SSH相关命令(Ubuntu)

sudo service ssh start ? ? ? ? ?// 启动 SSH 服务
sudo service ssh stop ? ? ? ? ? // 停止 SSH 服务
sudo service ssh restart ? ? ? ?// 重启 SSH 服务

sudo service ssh status ? ? ? ? // 查询 SSH 服务状态
sudo systemctl status sshd      //检查ssh服务确实在运行
ps -A | grep "ssh" ? ? ? ? ? ? ?// 查询 SSH 服务进程

4、在防火墙设置上启用 SSH 流量

如果您使用UFW作为 Ubuntu 20.04 主机上的默认防火墙,则可能需要在主机上允许 SSH 连接。

要在主机上启用 SSH 连接,请运行以下命令

sudo ufw allow ssh

?

如果您不确定是否正在使用UFW 防火墙,可以运行“ufw status”命令。

?

此时主机上不需要设置允许 SSH 连接

?

此时主机上需要设置允许 SSH 连接

5.在系统启动时启用 SSH 服务器

要检查您的服务是否启用,您可以运行以下命令

sudo systemctl list-unit-files | grep enabled | grep ssh

如果终端上没有结果,您应该“启用”该服务以便在启动时启动它

sudo systemctl enable ssh

6.在 Ubuntu 20.04 上配置 SSH 服务器

在向用户授予任何访问权限之前,正确配置 SSH 服务器非常重要。如果做得不好,您将面临 SSH 攻击的风险,并且您的整个基础设施很容易受到损害。默认情况下,SSH 配置文件位于/etc/ssh 文件夹中。

?

?在此目录中,您将找到许多不同的文件和文件夹,但最重要的是:

  • ssh_config:用于配置SSH 客户端。这意味着它定义了每次使用 SSH 连接到远程主机或在主机之间传输文件时应用的规则;
  • sshd_config:用于配置SSH 服务器。例如,它用于定义可访问的x或拒绝特定用户与您的服务器进行通信。

更改 SSH 默认端口

sshd_config 配置文件并查找以下行

#Port 22

确保将您的端口更改为未为其他协议保留的端口,更改默认 SSH 端口时要小心,连接时必须指定它。

在 SSH 服务器上禁用 root 登录

默认情况下,在最近的发行版中,root 登录设置为“禁止密码”,也就是说需要设置 SSH 密钥并使用它们才能以 root 身份进行连接。

即使我们在没有密码的情况下连接,也不建议使用 root 登录:如果密钥被泄露,您的整个主机就会被泄露。因此,您可以将此选项设置为“否”以完全限制它。

#PermitRootLogin
PermitRootLogin no

重新启动 SSH 服务器以应用更改

为了应用更改,您需要重新启动 SSH 服务器。

sudo systemctl restart sshd

sudo systemctl status sshd

二、ssh客户端、scp访问SSH服务

1.SSH 客户端访问SSH服务

// 连接远程主机(默认 SSH 端口为 22), 连接上后需要输入用户的密码
ssh 用户名@<主机IP>

// 指定端口连接
ssh 用户名@<主机IP>? -p <port>

2. SCP 客户端访问SSH服务

SCP, Secure Copy。SCP 相当于 本地的 CP 命令, 只不过 SCP 用于夸主机远程操作。
终端使用 SCP 命令访问远程主机, 远程主机必须已成功安装并启动 openssh-server 服务。

格式:?
? ? scp -r /本地文件路径 目标用户名@目标主机IP:/目标文件绝对路径 ? ? ? // 上传
? ? scp -r 目标用户名@目标主机IP:/目标文件绝对路径 /本地保存路径 ? ? ? // 下载
实例:

//本地 -> 远端(上传):如果上传的是文件夹, 必须加 -r 递归参数?否则会出现 not a regular file错误
scp [-r] <本地文件实际目录> <远端主机名>@<远端主机IP>:<远端文件存放目录>

//远端 -> 本地(下载):如果上传的是文件夹, 必须加 -r 递归参数 否则会出现 not a regular file错误
scp [-r] <远端主机名>@<远端主机IP>:<远端文件>?<本地文件存放目录>

三、ssh服务器搭建出现的问题

ssh服务器日志路径

查看SSH服务日志: 检查目标服务器上SSH服务的日志文件(例如 /var/log/auth.log/var/log/secure),寻找任何可能指示连接问题的错误

1、auth.log 频繁出现Cron: pam_unix (cron:session): session opened/closed for user root by (uid=0)

这个其实不是一个错误,只是日志中对 cron 定时任务的记录。但是在排查问题是会影响我们的判断,这些信息可能会占据大量日志空间,尤其是如果 cron 频繁执行任务时会导致大量的日志条目。

下面提供了在 Debian/Ubuntu 系统上更改日志记录设置的步骤,以减少在 auth.log 中记录由 cron 定时任务引起的会话开启和关闭信息。

修改过程:

1,进入/etc/pam.d目录

2,打开文件 common-session-noninteractive

3,查找 session required pam_unix.so 内容(一般在最后)

4,在这一行上方添加

session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid

5,保存并退出

6,重启crond服务(Ubuntu为cron):service cron restart

2、解决:no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

第一种方法,在当前用户的.ssh目录下新建config文件,如当前用户为root

vi ?~/.ssh/config
Host *
KexAlgorithms +diffie-hellman-group1-sha1

此方法只对当前用户生效,使用其他用户是又会报错。

第二种方法,修改/etc/ssh/ssh_config文件,在最末尾加入即可。

KexAlgorithms +diffie-hellman-group1-sha1

重启服务

重启sshd服务
systemctl restart sshd
或者
sudo systemctl reload sshd
或者
/etc/init.d/sshd restart

将以下行添加到 /etc/ssh/sshd_config 文件的结尾处:

KexAlgorithms diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

确保在编辑配置文件之后,重新加载SSH服务以使更改生效。在大多数Linux系统中,你可以使用类似下面的命令重新加载SSH服务:

sudo systemctl reload sshd

这将重新加载SSH服务的配置,使新的密钥交换算法配置生效。

3、error: kex_exchange_identification: read: Connection reset by peer

待解决

?

相关内容分推荐:

SSH的免密登录详细步骤(注释+命令+图)_免密登录ssh-CSDN博客

文章来源:https://blog.csdn.net/qq_43445867/article/details/134957054
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。