众所周知,ssh可以通过密码登录,但是可能被有心之人穷举破解,然后 cd / && rm-rf *
那么秘钥如何保证你的安全呢?
在创建秘钥的时候,会生成两个文件,一个叫“公钥”,一个叫“私钥”
公钥存放在你的Linux服务器上,另一个存放在你的ssh客户端上。当客户端发起连接时,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
看不懂?
客户端:请求连接
服务器:好的,我找一下authorized_keys,然后我造一个随机数,用公钥加密了,再给你
客户端:我用我的私钥解密,加上本次会话的ID加密发给你
服务器:和我计算的一样,同意连接
配置过程
生成密钥对
1. 使用 ssh-keygen 生成密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
-t rsa
:指定密钥算法为 RSA,你也可以选择其他算法如dsa
、ecdsa
或ed25519
-b 4096
:指定密钥长度为 4096 位,你可以选择其他长度-C "your_email@example.com"
:一个注释信息而已,可以不是邮箱
2. 设置密钥文件名和保存位置: 系统将提示你输入保存位置。默认情况下会在 ~/.ssh
目录
3. 设置短语保护(可选):如果你选择设置,将需要在每次使用时输入短语。这会增加私钥的安全性。但是忘记密码就没有办法了
4. 生成密钥对: 完成上述步骤后,系统将生成密钥对,并将公钥保存在 <文件名>.pub
文件中,私钥保存在没有后缀的文件中。
传输公钥到远程服务器
1. 使用 ssh-copy-id 命令(推荐): 这是一个方便的方法,可以自动将你的公钥添加到服务器的授权中:
ssh-copy-id username@remote_server
username
:用户名。remote_server
: IP 或主机名。
2. 手动复制公钥(备选方案): 如果没有 ssh-copy-id
命令,你可以手动将公钥内容添加到远程服务器的 ~/.ssh/authorized_keys
文件中。
在远程服务器上,打开 ~/.ssh/authorized_keys
:
nano ~/.ssh/authorized_keys
将公钥内容粘贴到这个文件中,保存并关闭文件。
3. 设置适当的权限: 确保远程服务器上的 ~/.ssh
目录和 authorized_keys
文件设置了适当的权限。使用以下命令设置权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
完成以上步骤后,你的公钥就已经成功传输到远程服务器上了。
测试连接
禁用密码身份验证
1. 编辑 SSH 服务器配置文件: 以root打开 SSH 服务器配置文件 /etc/ssh/sshd_config
:
nano /etc/ssh/sshd_config
2. 将 PasswordAuthentication 设置为 no: 将 PasswordAuthentication
的值改为 no
。这将禁用密码身份验证。
3. 重启 SSH 服务: 重新启动 SSH 服务以使更改生效。在终端中输入以下命令:
sudo service ssh restart
或者:
sudo systemctl restart ssh
7. 验证更改: 确保你可以通过公钥身份验证成功连接到服务器,而密码身份验证不再起作用。
现在,SSH 服务器将只接受公钥身份验证,而密码身份验证将被禁用。这将提高服务器的安全性,因为无法通过密码猜测或暴力攻击来进行身份验证。