?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 服务器。
sudo apt-get update
sudo apt-get install openssh-server
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 服务进程
如果您使用UFW作为 Ubuntu 20.04 主机上的默认防火墙,则可能需要在主机上允许 SSH 连接。
要在主机上启用 SSH 连接,请运行以下命令
sudo ufw allow ssh
?
如果您不确定是否正在使用UFW 防火墙,可以运行“ufw status”命令。
?
此时主机上不需要设置允许 SSH 连接
?
此时主机上需要设置允许 SSH 连接
要检查您的服务是否启用,您可以运行以下命令
sudo systemctl list-unit-files | grep enabled | grep ssh
如果终端上没有结果,您应该“启用”该服务以便在启动时启动它
sudo systemctl enable ssh
在向用户授予任何访问权限之前,正确配置 SSH 服务器非常重要。如果做得不好,您将面临 SSH 攻击的风险,并且您的整个基础设施很容易受到损害。默认情况下,SSH 配置文件位于/etc/ssh 文件夹中。
?
?在此目录中,您将找到许多不同的文件和文件夹,但最重要的是:
sshd_config 配置文件并查找以下行
#Port 22
确保将您的端口更改为未为其他协议保留的端口,更改默认 SSH 端口时要小心,连接时必须指定它。
默认情况下,在最近的发行版中,root 登录设置为“禁止密码”,也就是说需要设置 SSH 密钥并使用它们才能以 root 身份进行连接。
即使我们在没有密码的情况下连接,也不建议使用 root 登录:如果密钥被泄露,您的整个主机就会被泄露。因此,您可以将此选项设置为“否”以完全限制它。
#PermitRootLogin
PermitRootLogin no
为了应用更改,您需要重新启动 SSH 服务器。
sudo systemctl restart sshd
sudo systemctl status sshd
// 连接远程主机(默认 SSH 端口为 22), 连接上后需要输入用户的密码
ssh 用户名@<主机IP>
// 指定端口连接
ssh 用户名@<主机IP>? -p <port>
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服务的日志文件(例如
/var/log/auth.log
或/var/log/secure
),寻找任何可能指示连接问题的错误
这个其实不是一个错误,只是日志中对 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
第一种方法,在当前用户的.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服务的配置,使新的密钥交换算法配置生效。
待解决
?
相关内容分推荐: