如何使用公私钥登录服务器

在 Linux 中设置公私钥登录,能让远程连接既安全又便捷。其核心原理是:在本地机器生成一对数学上关联的“钥匙”(公钥和私钥),然后将公钥“锁”放在服务器上。当您登录时,服务器会用这把“锁”发起挑战,只有能正确“解锁”的本地私钥才能通过验证 。

生成SSH密钥对

首先,需要在您的本地机器上生成密钥对
可参考我之前的文章

https://blog.csdn.net/systemsb/article/details/147991344

生成成功后,会在 ~/.ssh/ 目录下看到两个文件:id_rsa(私钥,必须严格保密)和 id_rsa.pub(公钥,需要放到服务器上)。

将公钥上传至服务器

接下来,需要将本地的公钥上传到想登录的远程服务器上。

推荐方法:使用 ssh-copy-id 命令
这是最简单的方式,只需一行命令:

ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@服务器IP地址

例如:ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.100 。系统会提示输入一次该服务器用户的密码,验证成功后公钥会自动添加到服务器对应用户家目录下的 ~/.ssh/authorized_keys 文件中 。

备用方法:手动上传
如果机器上没有 ssh-copy-id 命令,可以手动操作:

  1. 在本地查看并复制公钥内容
    cat ~/.ssh/id_rsa.pub
    
    复制终端显示的全部内容,从 ssh-rsa 开始到邮箱注释结束 。
  2. 登录服务器,进入对应用户的 ~/.ssh 目录(如果没有则创建),并将公钥内容追加到 authorized_keys 文件:
    mkdir -p ~/.ssh
    echo "您复制的公钥内容" >> ~/.ssh/authorized_keys
    

配置服务器SSH服务

为了让服务器接受密钥登录,需要确保其SSH服务配置正确。登录服务器,编辑SSH配置文件 /etc/ssh/sshd_config

找到并确保以下参数设置如下:

PubkeyAuthentication yes         # 启用公钥认证
AuthorizedKeysFile .ssh/authorized_keys # 指定公钥文件路径
# 可选配置:在确认密钥登录成功后,为增强安全,可以禁用密码登录
PasswordAuthentication no        # 禁止密码认证

修改保存后,需要重启SSH服务以使配置生效。根据系统不同,命令可能是 systemctl restart sshdservice sshd restart

设置正确的文件权限

SSH协议对文件权限非常敏感,错误的权限会导致认证失败。请在服务器上执行以下命令,确保权限正确 :

# 设置.ssh目录权限为700 (仅所有者可读、写、执行)
chmod 700 ~/.ssh
# 设置authorized_keys文件权限为600 (仅所有者可读、写)
chmod 600 ~/.ssh/authorized_keys

测试密钥登录

现在,从您的本地机器新开一个终端,尝试登录服务器:

ssh 用户名@服务器IP地址

如果一切配置正确,将无需输入用户密码(如果私钥设置了密码,则需要输入之前设置的密钥密码)即可直接登录服务器 。

关键的安全注意事项

  1. 保护好私钥:私钥文件(如 id_rsa)相当于数字身份凭证,绝不能泄露给他人。建议在本地也对私钥文件设置严格的权限:chmod 600 ~/.ssh/id_rsa
  2. 备份私钥:将私钥文件妥善备份在安全的地方(如加密的U盘)。一旦丢失,且服务器上禁用了密码登录,将无法再登录系统 。
  3. 谨慎禁用密码登录:在通过密钥登录测试成功之前,切勿在服务器上先行设置 PasswordAuthentication no。最好保持一个已活跃连接的SSH会话进行配置测试,以防配置出错导致自己被锁在服务器外面 。
  4. 服务器日志排查:如果测试登录失败,可以查看服务器的认证日志来寻找原因,例如在CentOS等系统上可以使用 sudo tail -f /var/log/secure 命令查看实时日志 。
### 服务器公私钥概念及配置方法 #### 公私钥基础概念 公私钥是一种基于非对称加密算法的安全机制。其中,**公钥**用于加密数据或验证签名,而**私钥**则负责解密数据或生成签名。这种技术广泛应用于安全通信场景中,例如通过SSH协议实现无密码登录远程服务器。 在SSH环境中,客户端会生成一对公私钥[^1]。公钥会被放置于目标服务器上的`~/.ssh/authorized_keys`文件中,而私钥由客户端保存并严格保密。当客户端尝试连接到服务器时,服务器利用存储的公钥来加密一段随机消息发送给客户端,客户端随后使用其对应的私钥对该消息进行解密并将结果返回至服务器以完成身份认证过程[^3]。 #### 配置公私钥的具体步骤 ##### 客户端生成公私钥对 可以通过运行命令 `ssh-keygen -t rsa` 来创建一个新的RSA类型的密钥对。此操作通常会在用户的`.ssh`目录下生成两个文件:一个是名为`id_rsa`的私钥文件;另一个则是相应的公钥文件,默认命名为`id_rsa.pub`。 需要注意的是,尽管默认命名约定为`id_rsa`及其扩展名形式,但实际上可以根据需求自定义这些文件名称,不过这可能会影响某些自动化工具的功能支持情况。 ##### 将公钥复制到服务器上 对于类Unix操作系统(如Linux),可以直接借助`ssh-copy-id user@server_ip_address`这条指令轻松地将本地机器中的公钥上传至远端主机相应位置即`~/.ssh/authorized_keys`之中[^2]。然而,在Windows环境下由于缺乏原生对此功能的支持,则需手动执行如下几项工作: 1. **确认目标路径存在**: 如果尚未建立`.ssh`隐藏文件夹以及内部所需的子文档结构,请先自行构建它们。比如可采用`mkdir ~/.ssh && touch ~/.ssh/authorized_keys`这样的组合语句一次性达成目的。 2. **编辑授权键列表**: 打开刚才新建或者已有的`authorized_keys`文本档,并粘贴来自客户机端提取出来的公开钥匙字符串进去。 以下是具体代码示例展示如何添加新条目进入该档案当中: ```bash echo "your-public-key-string-here" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys # 设置适当权限保护隐私资料不被非法访问 ``` 最后记得调整整个.ssh目录及相关组件应有的读写属性设定,确保只有账户拥有者本人能够修改相关内容以防泄密风险发生。 #### 注意事项 - 同一公钥确实可以关联多台不同设备作为信任来源之一加以运用。 - 私钥务必妥善保管好切勿泄露出去以免遭受未经授权的操作行为危害系统安全性!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值