SSH协议是一种将一台服务器远程登录到另一台服务器的安全方法。 它提供了多种用于进行强身份验证的选项,并通过强加密来保护通信安全性和完整性。 它是其他协议(例如telnet和文件传输协议FTP)的安全替代。
更改默认端口
22端口是一个总所周知的标准ssh端口,因此ssh服务就不能使用该端口,而是使用一个最起码大于1024之后的一个随机端口。
Port 7193
仅使用2代的SSH协议
较早的协议SSH 1包含许多安全漏洞。 因此您应该使用SSH 2而不是SSH1。默认情况下,SSH 2应该设置为2。 如果没有,您可以使用
禁止root的ssh登录
允许直接root登录是您可能遇到的最危险的安全漏洞之一。 不允许任何服务器通过SSH定向root登录。要禁用直接root登录,请将PermitRootLogin从yes更改为no
使用公匙认证代替密码认证
公钥/私钥身份验证肯定比密码身份验证更安全,并且是更好的解决方案。每个键都是具有不同数学属性的大量键。私钥存储在您登录的计算机上,而公钥存储在您要登录的每台计算机上的.ssh / authorized_keys文件中。
如果计算机在Internet上可见,这尤其重要。使用加密密钥进行身份验证非常有用,因为您无需再输入密码。一旦在服务器上配置了公钥/私钥对身份验证,就可以完全禁用密码身份验证;这意味着没有授权密钥的任何人都无法获得访问权限。即使是最有创造力的黑客也将无法干预或潜入会话,也不会再尝试破解密码。关联的公钥可以自由共享,没有任何负面后果。公钥可用于加密只有私钥才能解密的消息。此属性用作使用密钥对进行身份验证的一种方式。
公钥已上载到您希望能够使用SSH登录的远程服务器。 密钥已添加到您要登录的用户帐户内的特殊文件中,称为〜/ .ssh / authorized_keys。
当客户端尝试使用SSH密钥进行身份验证时,服务器可以测试客户端是否拥有私钥。如果客户端可以证明它拥有私钥,则会生成一个shell会话或执行所请求的命令。
创建ssh密钥
向服务器配置SSH密钥身份验证的第一步是在本地计算机上生成SSH密钥对。为此,我们可以使用一个名为ssh-keygen的特殊实用程序,它包含在标准的OpenSSH工具套件中。默认情况下,这将创建2048位RSA密钥对,这适用于大多数用途。
ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
该实用程序将提示您选择将要生成的密钥的位置。 默认情况下,密钥将存储在用户主目录下的〜/ .ssh目录中。 私钥将称为id_rsa,关联的公钥将称为id_rsa.pub。
通常,最好在此阶段坚持使用默认位置。 这样做将允许您的SSH客户端在尝试进行身份验证时自动找到您的SSH密钥。 如果要选择非标准路径,请立即输入,否则,请按Enter以接受默认路径。
接下来,系统将提示您输入密钥的密码。 这是一个可选的密码,可用于加密磁盘上的私钥文件。您可能想知道,如果仍然需要输入密码,SSH密钥会提供什么优势。 一些优点是:
-
私有SSH密钥(可以受密码保护的部分)永远不会在网络上公开。 密码仅用于解密本地计算机上的密钥。 这意味着无法针对密码短语进行基于网络的暴力破解。
-
私钥保存在受限制的目录中。 SSH客户端将无法识别未保存在受限目录中的私钥。 密钥本身还必须具有受限的权限(仅所有者拥有读写权限)。 这意味着系统上的其他用户无法监听。
-
希望破解私有SSH密钥密码的任何攻击者都必须已经可以访问系统。 这意味着他们已经可以访问您的用户帐户或root帐户。 如果您处于此位置,则密码短语可以阻止攻击者立即登录到其他服务器。 希望这将使您有时间创建和实施新的SSH密钥对,并从受到破坏的密钥中删除访问权限。
由于私钥永远不会向网络公开,并通过文件权限进行保护,因此除了您(和root用户)之外,任何人都不应该访问此文件。密码短语用作额外的保护层,以防这些条件受到危害。密码短语是可选添加的。如果输入一个密钥,则每次使用此密钥时都必须提供该密钥(除非您运行的是存储解密密钥的SSH代理软件)。我们建议使用密码短语,但如果您不想设置密码短语,只需按Enter键即可跳过此提示。
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Qhg5X9GeuihfgjlrjgoirjgergeeerrEDJTGWQ0ouEPIss username@localh
The key's randomart image is:
+---[RSA 3072]----+
| .=o+.*o oo.. |
| =++ B .+ o. .|
| .+.* .+ + o+ |
| .o .= o o .=|
| . S o o o B|
| . o o *.|
| . . + .|
| . o . o |
| E . |
+----[SHA256]-----+
现在,您拥有了可用于身份验证的公钥和私钥。下一步是将公钥放在您本地计算机上,以便您可以使用SSH密钥身份验证进行登录。我们可以使用如下命令查看
- id_rsa是私匙
- id_rsa.pub是公匙
[username@localhost ~]$ ls -al ~/.ssh
total 12
drwx------. 2 username username 57 Feb 24 08:24 .
drwx------. 3 username username 95 Feb 24 06:51 ..
-rw-------. 1 username username 2675 Feb 24 08:24 id_rsa
-rw-r--r--. 1 username username 582 Feb 24 08:24 id_rsa.pub
-rw-r--r--. 1 username username 183 Feb 24 06:23 known_hosts
将公匙上传到远程的Linux/Unix主机
可以使用如下命令
ssh-copy-id <用户名>@<你远程的主机ip或域名>
如果你之前创建的私匙没有设定密码短语的话,可以使用无密码登录
ssh -p <端口号> <用户名>@<你远程的主机ip或域名>
此时,我们不妨查看一些远程Linux/Unix主机
[yening@localhost ~]$ ls -al ~/.ssh
总用量 8
drwx------. 2 user user48 2月 24 09:43 .
drwx------. 3 user user 95 2月 24 06:51 ..
-rw-------. 1 user user 399 2月 24 09:14 authorized_keys
-rw-r--r--. 1 user user 183 2月 24 06:23 known_hosts
稍微细心的Linux用户应该对远程主机~/.ssh进行更细化的权限设定,这个设定是公匙只能被当前ssh登录的用户只读。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
authorized_keys就是我们刚才上传到远程主机的公匙
禁用密码验证
PasswordAuthentication no
网友评论