共计 2535 个字符,预计需要花费 7 分钟才能阅读完成。
SSH(平安 Shell)是一个协定,它使你可能创立一个通过验证的私人连贯,并应用加密密钥爱护通道,在另一台机器上启动一个近程 Shell。应用这种连贯,你能够执行近程命令,启动平安文件传输,转发套接字、显示和服务,等等。
在 SSH 呈现之前,大多数远程管理是通过 telnet 实现的,偏心地说,一旦你能建设一个近程会话,你简直能够做任何你须要的事件。这个协定的问题是,通信是以纯明文的形式进行的,没有通过加密。应用流量嗅探器不须要 太多致力就能够看到一个会话中的所有数据包,包含那些蕴含用户名和明码的数据包。
有了 SSH,因为应用了非对称密钥,参加通信的设施之间的会话是加密的。现在,这比以往任何时候都更有意义,因为所有的云服务器都是由散布在世界各地的人治理的。
3 个配置 SSH 的技巧
SSH 协定最常见的实现是 OpenSSH,它由 OpenBSD 我的项目开发,可用于大多数 Linux 和类 Unix 操作系统。一旦你装置了这个软件包,你就会有一个名为 sshd_config 的文件来管制该服务的大部分行为。其默认设置通常是十分激进的,但我偏向于做一些调整,以优化我的 SSH 体验,并爱护我的服务器不被非法拜访。
1、扭转默认端口
这是一个并非所有管理员都记得的问题。任何有端口扫描器的人都能够发现一个 SSH 端口,即便你之后把它移到别的端口,所以你很难把本人从危险中移除,但这样却会无效的防止了数百个针对你的服务器扫描的不成熟脚本。这是一个能够让你省心,从你的日志中减去大量的乐音的操作。
在写这篇文章时,我在一个云服务提供商上设置了一个 SSH 服务器,默认端口 TCP 22,每分钟均匀被攻打次数为 24 次。在将端口改为一个更高的数字,即 TCP 45678 后,均匀每天有两个连贯并用各种用户名或明码进行猜想。
要扭转 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 服务。