一. 登录 linux 服务器的两种方式
- 使用
ssh用户名密码
的方式登录,但这种方式不安全,密码太简单容易被暴力破解,密码太复杂又不容易记。 - 使用
ssh公私钥
的方式登录。
- 以上两种方式都可以在图形化软件工具中配置,例如
finalshell
,Putty
,Xshell
等。本次介绍ssh公私钥
登录。
二. 原理的通俗解释
ssh公私钥
登录解决的问题是登录时的用户身份验证问题,默认使用RSA
(也支持其他算法:RSA、DSA、ECDSA、EdDSA、Ed25519
,它们在效率,安全性上有所区别)- 完整的流程
- 本地配置
- 在本地生成一对公私钥。
- 在目录
~/.ssh/
下创建config
文件(如果有的话直接编辑),添加对应服务器的配置,格式固定。
- 服务器配置
- 开启 ssh秘钥 登录(高版本都是默认开启秘钥登录的,如果安装了宝塔面板需要单独设置开启)。
- 上传用户的本地公钥到服务器。
- 秘钥登录
- 终端使用
ssh xxx
登录时,ssh 会根据config文件中的秘钥位置和用户信息自动验证用户身份,完成登录。
三. 相关文件
-
本地 ssh 相关的文件都在
~/.ssh/
下,本次用到的相关文件id_rsa
和id_rsa.pub
:默认一对公私钥的名字,可以有多对,使用命令ssh-keygen
生成。config
:配置目标服务器
的登录信息,有固定格式,默认可能没有这个文件需要自己创建。known_hosts
:当替换了原有 host 的公钥时,需要去这个文件里删除对应的 host 记录。
-
服务器 ssh 相关的文件
/etc/ssh/sshd_config
:配置 ssh,例如是否允许 root 登录,是否允许密码登录,是否允许秘钥登录。~/.ssh/authorized_keys
:将本地公钥保存到该文件中,各占一行,中间不要回车。
四. 关键步骤
- 生成秘钥对,可以检查目录
~/.ssh/
下是否有秘钥对,如果没有则重新生成。
# 给 邮箱zhangsan@qq.com 生成公私钥
# -t 参数:指定算法 ed25519,更加高效和安全
# -C 参数:指定公私钥中的注释,一般用邮箱或用户名,不影响使用
ssh-keygen -t ed25519 -C "zhangsan@qq.com"
# 输入命令后,如果不需要密码的话,连续3个回车。最后得到了两个文件:id_rsa和id_rsa.pub。
- 创建配置
~/.ssh/config
文件。
# 格式如下,可以配置多个,格式类似
Host server-abcHostName 1.2.3.4User rootIdentityFile ~/.ssh/id_rsa
- 服务器开启秘钥登录
- 高版本 linux 都是默认开启
秘钥登录
的,如果没有开启,可以参考以下文件中的参数。 /etc/ssh/sshd_config
中的参数Port # 设置端口PasswordAuthentication yes # 是否支持 密码 登录PubkeyAuthentication yes # 允许秘钥登录PermitRootLogin yes # 允许root登录
- 添加公钥到 服务器。
- 复制
id_rsa.pub
文件里的内容,到服务器的~/.ssh/authorized_keys
文件中,每个公钥各占一行。
- 验证是否可以登录。
# 之前的登录方式
ssh root@1.2.3.4 # 之后输入密码
# 新的登录方式
ssh server-abc
五. 命令总结
# 生成秘钥
ssh-keygen -t ed25519 -C "zhangsan@qq.com"
# 开启 ssh 秘钥登录,高版本默认开启,
# 如果安装了宝塔面板,需在面板设置中单独开启
# 如需开启 root 秘钥登录或其他设置,参考以下文件
/etc/ssh/sshd_config
# 添加用户本地公钥到服务器该文件中
~/.ssh/authorized_keys
# 原始的用户名密码登录方式
ssh username@ipaddress
# 方便的秘钥登录方式
ssh host