SSH(安全外壳)是一种协议,使您能够创建经过验证的私有连接,使用加密密钥保护通道,以在另一台机器上启动远程 shell。使用此连接,您可以执行远程命令、启动安全文件传输、转发套接字和显示以及服务等等。
在 SSH 出现之前,大多数远程管理都是通过 telnet 完成的,公平地说,一旦您建立远程会话,您几乎可以做任何您需要的事情。这个协议的问题是流量以纯文本形式未加密地传输。使用 流量嗅探器 查看会话中的所有数据包(包括包含用户名和密码的数据包)并不费力。
借助 SSH,由于使用了非对称密钥,通信中涉及的设备之间的会话是加密的。如今,随着所有云服务器从世界各地进行管理,这一点比以往任何时候都更加重要。
3 个 SSH 配置技巧
SSH 协议最常见的实现是 OpenSSH,由 OpenBSD 项目开发,可用于大多数 Linux 和类 Unix 操作系统。安装此软件包后,您将获得一个名为 sshd_config
的文件,该文件控制服务的大部分行为。默认设置通常非常保守,但我倾向于进行一些调整,以优化我的 SSH 体验并保护我的服务器免受未授权访问。
1. 更改默认端口
这是并非所有管理员都记得的事情。即使您移动了 SSH 端口,任何使用端口扫描器的人都可以发现它,因此您几乎无法摆脱危险,但您可以方便地避免针对您的服务器启动的数百个不成熟的脚本。这是一个您可以为自己做的好事,以减少日志中的大量噪音。
对于本文,我有一个 SSH 服务器默认端口 TCP 22 在一个云提供商上,平均每分钟的攻击次数为 24 次。在将端口更改为更高的数字 TCP 45678 后,每天连接和猜测任何用户名或密码的平均人数为 2 人。
要更改 SSH 的默认端口,请在您喜欢的文本编辑器中打开 /etc/ssh/sshd_config
并将 Port
的值从 22 更改为大于 1024 的某个数字。该行可能被注释掉了,因为 22 是默认值(因此不需要在配置中显式声明),因此在保存之前取消注释该行。
#Port 22122
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
更改端口并保存文件后,重启 SSH 服务器
$ sudo systemctl restart sshd
2. 不再使用密码
目前有一种普遍趋势是停止使用密码作为身份验证手段,双因素身份验证等方法越来越受欢迎。OpenSSH 可以使用非对称密钥进行身份验证,因此无需记住复杂的密码,更不用说每隔几个月轮换一次密码,或者担心在您建立远程会话时有人“肩窥”。SSH 密钥的使用使您可以快速安全地登录到您的远程设备。这通常意味着服务器本身处理不正确的用户名和密码的时间更少。登录非常简单。没有密钥,就没有条目——甚至没有提示。
要使用此功能,您必须同时配置客户端(您面前的计算机)和服务器(远程机器)。
在客户端机器上,您必须生成 SSH 密钥对。这包括公钥和私钥。顾名思义,一个密钥供您分发给您要登录的服务器,另一个密钥是私有的,绝不能与任何人共享。使用 ssh-keygen
命令创建一个新密钥,并使用 -t
选项指定一个好的、最新的加密库,如 ed25519
$ ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (~/.ssh/id_ed25519):
在密钥创建期间,系统会提示您命名文件。您可以按 回车键 接受默认值。如果您将来创建更多密钥,您可以为每个密钥指定自定义名称,但是拥有多个密钥意味着您需要指定要用于每次交互的密钥,因此目前只需接受默认值即可。
您还可以为您的密钥设置密码。这确保即使其他人设法获得了您的私钥(这本身绝不应该发生),他们也无法在没有您的密码的情况下使用它。对于某些密钥来说,这是一个有用的安全措施,但对于其他密钥来说则不合适(尤其是脚本中使用的密钥)。按 回车键 使您的密钥不设置密码,或者如果您选择,也可以创建密码。
要将您的密钥复制到服务器上,请使用 ssh-copy-id
命令。例如,如果我拥有一台名为 example.com
的服务器,那么我可以使用以下命令将我的公钥复制到该服务器
$ ssh-copy-id jgarrido@example.com
这会在服务器的 .ssh
目录中创建或修改 authorized_keys
文件,其中包含您的公钥。
一旦 ssh-copy-id
命令确认了它所做的事情,请尝试从您的计算机登录以验证您是否可以在没有密码的情况下登录(或者如果您选择使用密码,则使用密钥的密码)。
一旦您在没有使用服务器帐户密码的情况下登录到您的服务器,请编辑服务器的 sshd_config
并将 PasswordAuthentication
设置为 no
。
PasswordAuthentication no
重启 ssh
服务以加载新配置
$ sudo systemctl restart sshd
3. 决定谁可以登录
大多数发行版不允许 root 用户通过 SSH 登录,这确保只有非特权帐户处于活动状态,并使用 sudo
命令根据需要提升权限。这可以防止一个明显的且令人痛苦的目标(root)受到简单但非常常见的脚本攻击。
同样,OpenSSH 的一个简单而强大的功能是能够决定哪些用户可以登录到机器。要设置哪些用户被授予 SSH 访问权限,请在您喜欢的文本编辑器中打开 sshd_config
文件,并添加如下行
AllowUsers jgarrido jane tux
重启 SSH 服务以加载新的配置选项。
这只允许三个用户(jgarrido、jane 和 tux)登录或在远程机器上执行任何操作。
最终想法
您可以使用 OpenSSH 来实现强大而稳健的 SSH 服务器。这些只是加强安装的三个有用选项。不过,您可以在 sshd_config
文件中启用或禁用大量功能和选项,并且有许多很棒的应用程序,例如 Fail2ban,您可以使用它们来进一步保护您的 SSH 服务。
1 条评论