Linux/Unix 服务器上基于 SSH 公钥的身份验证
SSH协议推荐一种用于远程登录和远程文件传输的方法,该方法为两个服务器系统之间交换的数据提供机密性和安全性。SSH 依赖于公钥加密的使用。OpenSSH 服务器在 Linux 或类 Unix 系统下提供这种设置。本指南介绍如何生成和使用 ssh 公钥以实现自动化使用,例如:
- 使用 shell 脚本自动登录
- 进行备份
- 从 shell 提示符运行命令等
- 无需密码登录
如何为 Linux/Unix 配置基于 SSH 公钥的身份验证
步骤和命令如下:
- 在本地系统上输入:ssh-keygen
- 将公钥安装到远程服务器:ssh-copy-id user@remote-server-ip-name
- 使用 ssh 进行无密码登录:ssh user@remote-server-ip-name
让我们详细了解所有命令。
生成 SSH 密钥
首先,登录您的工作站。例如,以 vivek 用户身份登录名为 admin.fbsd.example.org 的工作站。请参考以下示例设置。您将以您希望进行无密码 ssh 连接的用户身份登录到本地系统。
基于 ssh 密钥的身份验证
ssh-keygen -t rsa
- ~/.ssh/id_rsa :识别(私钥)
- ~/.ssh/id_rsa.pub :公钥
如何将公共密钥 (~/.ssh/id_rsa.pub) 复制到你的服务器
使用 scp 命令将 id_rsa.pub(公钥)从本地系统复制到rh9linux.example.org远程服务器作为 authorized_keys 文件,这称为“将公钥安装到服务器”:
scp ~/.ssh/id_rsa.pub vivek@rh9linux.example.org:~/.ssh/authorized_keys
另一种选择是从本地工作站使用 ssh-copy-id 命令,如下所示:
ssh-copy-id user@remote-box
ssh-copy-id -i ~/.ssh/id_rsa.pub vivek@rh9linux.example.org
如何使用 SSH 密钥登录远程服务器
从您的本地系统(例如 FreeBSD/macOS/Linux/Unix 工作站)输入以下命令:
ssh user@remote-box
ssh vivek@rh9linux.example.org
更改工作站上的密码
要更改 ssh 密钥的密码,请使用 ssh-keygen 命令,如下所示:
ssh-keygen -p
或
cd ~/.ssh/
ssh-keygen -f id_rsa -p
如何使用 ssh-agen 命令
您可以使用 ssh-agent 命令来避免在 CLI 上继续输入密码:
现在 ssh 服务器将不再使用密码提示。可以将上述两个命令添加到您的 ~/.bash_profile 文件中,这样您一登录工作站就可以设置代理。
ssh-agent $SHELL
ssh-add
删除 ssh-agent 持有的密钥
要列出密钥,请输入:
ssh-add -l
要删除所有密钥,请输入:
ssh-add -D
要删除特定密钥,请输入:
ssh-add -d key
参见:
- keychain:为备份脚本设置安全无密码 SSH 访问
- sshpass:登录 SSH 服务器/使用 Shell 脚本提供 SSH 密码
- 如何在 Linux / Unix 系统上设置 SSH 密钥
- 如何使用 Ansible DevOPS 工具将 ssh 公钥上传为 authorized_key
- 手册页:sshd(8)、ssh(1)、ssh-add(1)、ssh-agent(1)