默认情况下,SSH 侦听端口 22。更改默认 SSH 端口会通过降低自动攻击的风险为您的服务器增加额外的安全层。本教程介绍了如何更改 Linux 中的默认 SSH 端口。我们还将向您展示如何配置防火墙以允许访问新的 SSH 端口。
保护您的服务器免受攻击的最佳方法是将您的防火墙配置为仅允许从受信任的主机访问端口 22 并设置基于 SSH 密钥的身份验证 。更改 SSH 端口
更改映像的 SSH 端口是一项简单的任务。您需要做的就是编辑 SSH 配置文件并重新启动服务。
以下部分说明如何在 Linux 系统上更改 SSH 端口。
1. 选择一个新的端口号
在 Linux 中,1024 以下的端口号是为知名服务保留的,只能由 root 绑定。虽然您可以为SSH服务使用1-1024范围内的端口,以避免以后出现端口分配问题,但建议选择1024以上的端口。在本例中将 SSH 端口更改为 5522,您可以选择任何您想要的端口。
2. 调整防火墙
在更改 SSH 端口之前,您需要调整防火墙以允许新 SSH 端口上的流量。如果您使用 UFW(Ubuntu 的默认防火墙配置工具),请运行以下命令打开新的 SSH 端口:
sudo ufw allow 5522/tcp
在 CentOS 中,默认的防火墙管理工具是 FirewallD。要打开新端口,请运行:
sudo firewall-cmd --permanent --zone=public --add-port=5522/tc
sudo firewall-cmd --reload
CentOS 用户还需要调整 SELinux 规则:
sudo semanage port -a -t ssh_port_t -p tcp 5522
如果您使用 iptables 作为防火墙,要打开新端口,请运行:
sudo iptables -A INPUT -p tcp --dport 5522 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
3.配置SSH
/etc/ssh/sshd_config使用文本编辑器打开 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
搜索 以 开头的行Port 22。在大多数情况下,该行以哈希 ( #) 字符开头。删除哈希#并输入新的 SSH 端口号:
Port 5522
修改 SSH 配置文件时要格外小心。配置错误可能导致SSH服务无法启动。
完成后,保存文件并重新启动 SSH 服务以应用更改:
sudo systemctl restart ssh
在 CentOS 中,ssh 服务被命名为sshd:
sudo systemctl restart sshd
要验证 SSH 守护程序是否正在侦听 新端口 5522,请键入:
ss -an | grep 5522
输出应如下所示:
tcp LISTEN 0 128 0.0.0.0:5522 0.0.0.0:*
tcp ESTAB 0 0 192.168.121.108:5522 192.168.121.1:57638
tcp LISTEN 0 128 [::]:5522 [::]:*
使用新的 SSH 端口
要指定端口,请调用ssh 后跟-p <port_number>选项的命令:
ssh -p 5522 username@remote_host_or_ip
如果您经常连接到多个系统,则可以通过在SSH 配置文件中定义所有连接来简化工作流程 。
您现在学习了如何更改 Linux 服务器上的 SSH 端口。您还应该设置基于SSH 密钥的身份验证, 并在不输入密码的情况下连接到您的 Linux 服务器。
第二章怎样将 SSH 公钥添加到服务器
公钥认证允许您通过 SSH 访问服务器而无需密码。 这里有两种方法可以将公共 ssh 密钥复制到服务器。
我相信您了解基本的 SSH 概念。 您的 Linux 服务器已启用 ssh。 您已在个人计算机上生成了 ssh 密钥。 现在您想将您的公钥上传到服务器的授权密钥,以便您可以访问它而无需一直输入您的帐户密码。
本快速教程向您展示了向服务器添加公共 SSH 密钥的两种方法。
要求
在你看到之前,让我们先弄清楚你应该已经拥有什么:
- 您的目标服务器应该启用了 ssh
- 您应该已经生成了公共和私人 ssh 密钥(只需使用命令 ssh-keygen -t rsa)
- 您应该在服务器上有一个用户帐户和密码。 即使是 root 帐户也可以。
- 你应该知道服务器的IP地址
确定了以上四个要求之后,我们来看看怎样使用公钥认证。
身份验证是针对每个用户群的,因此公钥会进入目标用户的家中。
方法一:自动复制ssh key到服务器
第一种方法是最终用户将其个人计算机的公钥复制到远程服务器上的授权密钥列表中。
在这里,我假设您能够使用 ssh 登录到远程服务器 [email protected]_of_server。 它会询问您的帐户密码,然后您进入服务器。
如果您将公钥添加到服务器,您应该能够在不输入密码的情况下登录。
OpenSSH 提供了一个方便的工具调用,称为 ssh-copy-id,用于将 ssh 公钥复制到远程系统。 它甚至创建所需的目录和文件。
正如我之前提到的,您应该知道要通过公钥身份验证访问的服务器的用户名和密码。
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]_ADDRESS_OF_THE_SERVER
出现提示时,输入您在远程服务器上的用户帐户的密码。 您的公钥应该自动复制到远程服务器上的相应文件夹中。
我使用了 ~/.ssh/id_rsa.pub 因为这是公共 ssh 密钥的默认位置。 如果你在其他地方有它,你应该在上面的命令中使用它。
方法二:手动复制ssh公钥到服务器
第一种方法在用户端执行操作。 假设您是系统管理员并且您的服务器不允许通过密码进行 SSH 登录。 访问服务器的唯一方法是使用 SSH 公钥身份验证。
在这种情况下,您可以要求最终用户提供她/他的公钥。 现在你可以做的是创建 .ssh/authorized_keys 目录,然后在这里复制公钥。
让我展示一下步骤。
第一步:获取公钥
通过键入以下命令要求最终用户提供公钥:
cat ~/.ssh/id_rsa.pub
它将显示一个以 ssh-rsa 开头的长随机字符串:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP [email protected]
您可以通过电子邮件或消息传递工具获取此文本。 通常,这应该不是问题。
第二步:在用户家目录下创建ssh目录(以系统管理员身份)
请记住,您必须在最终用户的主目录中创建这些新目录和文件,而不是您自己的 (root/sysadmin)。
mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys
现在使用像 Vim 这样的文本编辑器打开这个 /home/user_name/.ssh/authorized_keys 文件,并在此处添加用户的公钥:
vim /home/user_name/.ssh/authorized_keys
Save 和 close 文件。 快准备好了。
第 3 步:为文件设置适当的权限
对 ssh 文件拥有适当的文件权限非常重要,否则您会看到诸如 Permission denied (publickey) 之类的错误。
首先,确保设置正确的文件权限:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys
您使用 root 或您自己的文件创建了这些文件 admin 其他用户的帐户。 您需要将所有权更改为用户:
chown -R username:username /home/username/.ssh
完成后,您可以最终用户登录到服务器。