实现Shell免密登录的详细指南

server/2024/10/23 3:46:19/

实现Shell免密登录的详细指南

  • 前提条件
  • 步骤一:生成SSH密钥对
  • 步骤二:将公钥复制到远程服务器
  • 步骤三:配置SSH客户端(可选)
  • 步骤四:测试免密登录
  • 常见问题排查

在使用Linux或Unix系统时,我们经常需要通过Shell访问远程服务器。通常,这种访问需要通过SSH(Secure Shell)进行,每次连接时都需要输入用户名和密码,这不仅繁琐,而且在某些自动化场景下显得尤为不便。为了实现免密登录,我们可以使用SSH密钥对进行身份验证。本文将详细介绍如何配置SSH免密登录。

在这里插入图片描述

前提条件

  • 本地机器和远程服务器都已安装并配置了SSH服务。
  • 你对本地机器和远程服务器都有管理员(或足够的)权限。

步骤一:生成SSH密钥对

  1. 打开终端
    在你的本地机器上,打开一个终端窗口。

  2. 检查现有密钥
    执行以下命令查看是否已有SSH密钥:

    ls -al ~/.ssh
    

    如果有id_rsaid_rsa.pub文件(或其他以id_开头的文件对),说明已经存在密钥对。如果没有,继续下一步生成新密钥。

  3. 生成新密钥
    使用以下命令生成新的SSH密钥对(默认会生成RSA类型的密钥):

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
    

    提示:

    • -t rsa 指定密钥类型为RSA。
    • -b 4096 指定密钥长度为4096位。
    • -C "your_email@example.com" 为密钥添加注释(通常是你的邮箱)。

    执行命令后,会提示你输入保存密钥的位置和密钥密码(可选)。如果不希望设置密码,直接按回车跳过。

步骤二:将公钥复制到远程服务器

  1. 使用ssh-copy-id命令
    执行以下命令将公钥(~/.ssh/id_rsa.pub)复制到远程服务器的~/.ssh/authorized_keys文件中:

    ssh-copy-id username@remote_host
    

    其中,username是远程服务器的用户名,remote_host是远程服务器的IP地址或主机名。

  2. 手动复制公钥(如果ssh-copy-id不可用):

    • 首先,显示公钥内容:
      cat ~/.ssh/id_rsa.pub
      
    • 复制输出的内容。
    • 通过SSH登录到远程服务器:
      ssh username@remote_host
      
    • 在远程服务器上,编辑或创建~/.ssh/authorized_keys文件,并将复制的公钥内容粘贴进去。

步骤三:配置SSH客户端(可选)

  1. 创建或编辑SSH配置文件
    在本地机器的~/.ssh/目录下,创建或编辑config文件,以便为特定主机配置使用密钥的相关参数。例如:

    Host remote_hostUser usernameIdentityFile ~/.ssh/id_rsa
    
  2. 调整SSH权限
    确保只有当前用户可以访问~/.ssh目录及其内容:

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/id_rsa
    chmod 644 ~/.ssh/id_rsa.pub
    chmod 644 ~/.ssh/authorized_keys  # 在远程服务器上执行
    

步骤四:测试免密登录

  1. 尝试SSH连接
    在本地机器上,执行以下命令尝试连接到远程服务器:
    ssh username@remote_host
    
    如果配置正确,你应该能够直接登录到远程服务器,而无需输入密码。

常见问题排查

  1. 权限问题
    确保~/.ssh目录和密钥文件的权限设置正确。

  2. SSH配置问题
    检查本地和远程服务器的/etc/ssh/sshd_config文件,确保没有禁用公钥认证(PubkeyAuthentication yes)。

  3. 网络问题
    确保本地机器和远程服务器之间的网络连接正常。

  4. 密钥匹配问题
    确认~/.ssh/authorized_keys文件中包含的公钥与本地私钥匹配。

通过以上步骤,你应该能够成功配置SSH免密登录,从而极大地方便日常的服务器管理和自动化任务。如果遇到问题,仔细检查每一步的配置,并参考相关的SSH文档和日志进行排查。


http://www.ppmy.cn/server/134062.html

相关文章

强化学习案例:美团是如何在推荐系统中落地强化学习

目录 美团的强化学习应用场景和分析 场景举例 使用原因 强化学习的六大要素 智能体 环境 行动 奖励 目标 状态 美团强化学习模型设计 美团强化学习工程落地 总体的数据结构关系图 实现步骤 1. 日志收集与实时处理(Log Collector, Online Joiner&…

无极低码课程【redis windows下服务注册密码修改】

下载Windows版本的Redis linux环境 (自行下载) 1.打开官网https://redis.io/downloads/ windows环境 1.打开github https://github.com/microsoftarchive/redis/releases 然后选择你喜欢的版本zip或msi下载 2.这里下载zip版,解压后后,打开安装目录 3.双击redis-server…

数据抓取时,使用动态IP要注意哪些?

在充满竞争和数据驱动的商业环境中,动态IP已成为数据抓取过程中不可或缺的工具。动态IP的应用能有效提高抓取成功率,但同时也伴随着一系列需要注意的问题。在本文中,我们将详细探讨在数据抓取时使用动态IP时应注意的事项,以确保抓…

深入理解WPF中的数据绑定:完整指南

如果你曾经使用Windows Presentation Foundation (WPF)进行开发,你可能听说过“数据绑定”这个术语。数据绑定是WPF最强大的功能之一,它能够在用户界面和业务逻辑之间实现无缝的数据流,从而简化开发并保持代码整洁。在这篇文章中,…

Java项目-基于Springboot的招生管理系统项目(源码+说明).zip

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

【实战案例】树形字典结构数据的后端解决方案

在管理系统中,经常会有树形结构的数据需求,例如如图所示的课程一级分类和二级分类 对应这样的情况在数据库层面就需要对字段进行设计,表字段信息和示例数据说明如下图所示 通过上述说明可以看出这张表的数据是树形结构,通过根节…

ShardingProxy服务端分库分表

目录 一、为什么要有服务端分库分表? 二、ShardingProxy基础使用 1、部署ShardingProxy 2、配置常用分库分表策略 三、ShardingSphere中的分布式事务机制 1、什么是XA事务? 2、实战理解XA事务 3、如何在ShardingProxy中使用另外两种事务管理器&a…

数据库模式概述

数据库模式概述 在数据库系统中,数据库模式是数据库结构的描述,它定义了数据库中的数据如何组织、存储和管理。根据不同的层次,数据库模式可以分为三种类型:外模式(External Schema)、概念模式&#xff08…