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博客