在日常运维工作中,SSH(Secure Shell)是一种常用的远程管理工具,用于安全地访问服务器或执行命令。然而,默认情况下,每次通过SSH连接时都需要输入密码,这不仅降低了工作效率,还可能带来一定的安全隐患。因此,配置SSH免密码登录显得尤为重要。
一、准备工作
在开始配置之前,请确保您的Ubuntu服务器和客户端均已安装OpenSSH服务。通常情况下,Ubuntu默认已经安装了OpenSSH,您可以通过以下命令检查:
```bash
sudo systemctl status ssh
```
如果未安装,可以使用以下命令进行安装:
```bash
sudo apt update && sudo apt install openssh-server -y
```
此外,确保防火墙规则允许SSH端口(默认为22)的流量。您可以使用`ufw`来开放该端口:
```bash
sudo ufw allow 22
sudo ufw enable
```
二、生成密钥对
为了实现免密码登录,我们需要在客户端生成一对公钥和私钥。以下是具体步骤:
1. 打开终端并切换到当前用户的主目录:
```bash
cd ~
```
2. 使用`ssh-keygen`命令生成密钥对:
```bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
```
其中:
- `-t rsa`指定密钥类型为RSA。
- `-b 4096`指定密钥长度为4096位。
- `-C`添加注释信息,通常是您的邮箱地址。
3. 按提示操作,选择保存路径(默认为`~/.ssh/id_rsa`)并设置密码保护(可选)。完成后,您会看到类似如下的输出:
```
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
```
三、传输公钥至服务器
接下来,将生成的公钥复制到目标服务器上。这里推荐使用`ssh-copy-id`工具,它能够简化这一过程:
```bash
ssh-copy-id username@server_ip
```
执行上述命令后,系统会提示输入远程服务器的密码。验证成功后,公钥会被自动添加到服务器上的`~/.ssh/authorized_keys`文件中。
如果您不想使用`ssh-copy-id`,也可以手动完成此步骤。首先,在客户端读取公钥
```bash
cat ~/.ssh/id_rsa.pub
```
然后,将输出的内容复制,并在服务器上创建或编辑`~/.ssh/authorized_keys`文件:
```bash
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
```
将公钥粘贴到文件末尾,保存并退出。最后,调整文件权限以确保安全性:
```bash
chmod 600 ~/.ssh/authorized_keys
```
四、测试免密码登录
完成以上配置后,尝试从客户端直接登录服务器,无需输入密码:
```bash
ssh username@server_ip
```
如果一切正常,您应该可以直接进入服务器的shell环境,而无需输入密码。
五、注意事项
- 私钥保护:请妥善保管客户端生成的私钥文件,避免泄露给他人。
- 权限管理:定期检查服务器上的`~/.ssh`目录及其文件权限,防止未经授权的修改。
- 多用户支持:如果需要为多个用户配置免密码登录,需针对每个用户重复上述流程。
通过以上方法,我们成功实现了Ubuntu系统的SSH免密码登录功能。这种方法既提高了工作效率,又增强了系统的安全性,是现代运维管理中的必备技能之一。