# SSH 免密登录

SSH 免密登录是一种通过密钥对而非传统密码进行身份验证的 SSH 登录方式。它具有以下显著优势:

  • 便捷高效: 用户无需每次登录都输入密码,简化了登录流程,节省了时间和精力,尤其适用于需要频繁登录的场景,如自动化脚本、持续集成 / 持续交付 (CI/CD) 环境等;
  • 增强安全性: 免密登录使用非对称加密算法,私钥保存在本地,公钥部署在服务器上,私钥无需在网络中传输,大大降低了密码被窃取的风险。即使服务器被入侵,攻击者也无法仅凭服务器上的公钥推导出用户的私钥;
  • 自动化友好: 对于自动化任务和脚本,SSH 免密登录可以实现无人值守的身份验证,无需人工干预,提高了自动化程度和效率。

总而言之,SSH 免密登录在提供更高安全性的同时,也显著提升了用户体验和工作效率,是现代服务器管理和自动化运维的重要组成部分。

# SSH 密钥对生成

ssh-keygen 是一个强大的命令行工具,用于生成、管理和转换 SSH 密钥,这些密钥用于安全地远程连接到服务器。
主要功能:

  • 生成密钥对: ssh-keygen 可以生成 RSA、DSA、ECDSA 和 Ed25519 等多种类型的密钥对。每个密钥对包含一个私钥(需要妥善保管)和一个公钥(可以共享)。
  • 密钥管理: 除了生成密钥,ssh-keygen 还可以用于更改密钥的密码、转换密钥格式、显示密钥指纹等。
  • 支持多种密钥类型: 允许用户根据安全需求和兼容性选择合适的密钥类型。

如果在密钥对生成时自定义了参数,请根据自身设置的参数调整之后的所有指令。

h
ssh-keygen -t ed25519
# ed25519 密钥对是当前较新版本的 ssh-keygen 默认生成的密钥,因此可以缺省参数 - t ed25519。
# 之后一路回车即可生成默认配置的密钥对

# SSH 公钥上传

使用命令或 sftp 等手段将生成密钥对的公钥上传至 ~/.ssh 文件夹中。
下述的 ServerIP 以及 Username 请根据服务器进行修改。

h
ssh-copy-id -i ~/.ssh/id_ed25519.pub Username@ServerIP

# SSH 服务端配置

使用命令将上传的公钥文件写入 authorized_keys 并设置其权限。

h
cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys #权限不能给大,会有报错

# SSH 客户端测试

使用如下指令测试 SSH 密钥是否已经配置成功。

h
ssh -i ~/.ssh/id_ed25519 Username@ServerIP

# SSH 服务配置

在进行下述修改端口、禁止密码登录操作前,请确保端口已经开放、密钥对登录已经可以成功。

SSH 配置文件默认位置为 /etc/ssh/sshd_config,可使用管理员权限进行编辑。

# 常用参数

l
Port 22 # SSH 连接端口为 22
PermitRootLogin yes # 是否允许 root 用户直接通过 ssh 登录
PasswordAuthentication no #是否允许密码登录

# 重启 ssh 服务应用更改

配置完成后重启 ssh 服务进行应用。

h
sudo systemctl restart ssh