Linux服务器安全 SSH 用户密钥认证登录

2023-11-11

一、SSH基本简介

    SSH 提供两种安全验证方式:
    1. 基于口令:客户端使用账号和口令登录服务器,所有传输数据都会被加密。但可能存在伪造服务器冒充真正的服务器与客户端进行交互,不能避免中间人攻击。
    2. 基于密钥:使用一对密钥(私钥 + 公钥),将公钥放置到服务器注册。当用户从客户端登录服务器时,服务器会接到使用密钥(即注册在服务器的公钥)进行安全验证请求,服务器首先比对从客户端发送过来的公钥与在己方注册的公钥是否一致,如果一致,服务器会使用该公钥加密数据向客户端发起 "挑战"[1],从而避免中间人攻击。

    SSH 协议主要分成三个协议:
    1. 传输层协议(The Transport Layer Protocol):传输层协议提供服务器认证,数据机密性,信息完整性等支持。
    2. 用户认证协议(The User Authentication Protocol):用户认证协议为服务器提供客户端的身份鉴别。
    3. 连接协议(The Connection Protocol):连接协议将加密的信息隧道划分成若干逻辑通道,提供给更高层应用协议使用。

    OpenSSH 提供了以下几个工具:
    1. ssh:实现 SSH 协议,用以建立安全连接,它替代了较早的 rlogin 和 Telnet。
    2. scp, sftp:利用 SSH 协议远程传输文件,它替代了较早的 rcp。
    3. sshd:SSH 服务器守护进程,运行在服务器端。
    4. ssh-keygen:用以生成 RSA 或 DSA 密钥对。
    5. ssh-agent, ssh-add:管理密钥的工具。
    6. ssh-keyscan:扫描网络中的主机,记录找到的公钥。


二、服务器端密钥的生成和配置

    1.在用户目录(例如root用户就是cd /root)下新建一个.ssh目录,并将其目录权限改为700(仅用户自身有读写操作权限):
    # cd /root
    # mkdir .ssh
    # chmod 700 .ssh

    2.进入.ssh目录,使用ssh-keygen命令生成rsa密钥对:
    # ssh-keygen -t rsa
    如果私钥文件不需要加密,一路直接按回车即可。如果需要加密,如下图所示地方输入相应的密码即可:

    3.这时生成了两个文件:id_rsa和id_rsa.pub,其中前一个为私钥,后一个为公钥,公钥须保留在服务器上,私钥拷贝到客户端机器上。

    4.在.ssh目录中新建一个文件名为:authorized_keys,将公钥内容拷贝到这个文件中,并将文件权限改为600(仅用户自身有读写权限):
    # touch authorized_keys
    # cat id_rsa.pub >> authorized_keys (双尖括号>>表示像向文件中追加)
    # chmod 600 authorzied_keys

    到此,服务器端的密钥设置完成,这里需注意要保证.ssh和authorized_keys都仅用户自身有写权限,否则验证无效,这也是系统处于安全性考虑做的设置。

三、客户端密钥的设置

    首先我们需要将在服务器端生成的私钥id_rsa拷贝到要用来登录服务器的客户端电脑。接下来根据客户端电脑操作系统的不同进行分别说明:

    Windows系统

    在Windows系统下,一般我们采用不同的X server工具来登录,需要先将私钥导入到登录工具的密钥管理器,建立一个新的连接,用户名和主机的填写与采用用户名密码登录一样,登录不再选择”Password”而是”Public key",User Name填写自己的登录用户名,User Key选择之前导入的服务器私钥 ,保存之后,即可无密码登录。

    Linux系统

    Linux系统下设置同样先将服务器私钥拷贝到客户端

    1.与服务器端一样,在用户目录下新建一个.ssh目录,并将其目录权限改为700(仅用户自身有读写操作权限):
    # mkdir .ssh
    # chmod 700 .ssh

    2. 将私钥id_rsa拷贝到.ssh目录下,检查文件权限是否为600,如果不是,需要更改文件权限为600
    # mv  id_rsa  ./.ssh
    # chmod 600 id_rsa

    3. 这时即设置完毕,输入ssh命令,即可直接连接到服务器,无需输入用户名密码
    # ssh 服务器IP

    4. 如果需要从客户端通过密钥认证的方式登录不同的服务器,私钥的名称不能都是用id_rsa,这是可以在.ssh目录下建立一个config文件来进行区分,config文件权限同样设为600
    # touch config
    # chmod 600 config

    5. 为config文件添加内容如下:
    Host xx.xx.xx.xx                //设置服务器IP
    HostName xx.xx.xx.xx           //设置服务器名称
    Port 22                       //设置端口
    User root                    //设置登录用户
    IdentityFile ~/.ssh/id_rsa  //设置私钥路径

    这样,用户可以将私钥id_rsa改为与config文件中irs_file同名的文件名,就可以匹配登录服务器了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux服务器安全 SSH 用户密钥认证登录 的相关文章

  • 有人可以解释一下以下内存分配 C 程序的性能行为吗?

    在我的机器上 时间 A 和时间 B 交换取决于是否A是 定义或未定义 这会改变两个的顺序 callocs 被称为 我最初将此归因于寻呼系统 奇怪的是 当mmap被用来代替calloc 情况更加奇怪 两个循环花费的时间相同 正如预期的那样 作
  • Visual Studio 代码中的“Git:gpg 未能签署数据”

    全新安装 Linux 后 我尝试设置我的环境 并且不断收到Git gpg failed to sign the data在本地提交更改时出错 我使用的是 Visual Studio Code 专有版本 而不是开源版本 gitconfig u
  • Cmake 错误未定义对“pthread_create”的引用

    我对 cmake FindThreads 进行了测试 这是我的源代码test cpp和CMakeLists txt include
  • python中的多服务器监控/自动重启

    我有 2 个服务器程序 必须使用 GNU Screen 启动 我想使用基于 Python 的程序来强化这些服务器 防止崩溃 该程序启动每个屏幕会话 然后监视服务器进程 如果服务器进程崩溃 我需要 python 代码来终止无关的屏幕会话并再次
  • 强制 shell 在 SunGrid 引擎中使用 conda 变量中的 python [重复]

    这个问题在这里已经有答案了 我正在尝试在 SunGrid 引擎中执行 python 文件 并且从 anaconda3 环境变量中执行它 我的代码很简单 from future import print function import url
  • 连接到 Amazon EC2 实例时 SSH 挂起

    我可以使用以下命令连接到 ec2 实例 但今天我无法使用它进行连接 ssh i abcKey pem email protected cdn cgi l email protection v 以下是详细内容 我已经在 EC2 中打开了 SS
  • 无法声明接口:资源繁忙

    我正在使用 USB4Java 低级版本 并且基本上是根据这段代码工作的here http www mets blog com java usb communication usb4java 我在 Ubuntu 中工作 遇到了有关权限的问题
  • 在Linux服务器中安装ZLIB

    我要安装ZLIB http www techsww com tutorials libraries zlib installation installing zlib on ubuntu linux php在Linux服务器中 我的服务器帐
  • 如何使 ssh-add 从文件中读取密码?

    我正在尝试添加一个密钥ssh agent并想要ssh add从我正在使用的密钥文件中读取密码 这怎么可能 如何通过 shell 脚本自动执行此过程 根据您的发行版和 ssh add 的版本 您可能能够或不能使用 pssh add 的选项以这
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 如何仅使用 grep/sed 提取子字符串和数字

    我有一个包含文本和数字的文本文件 我想使用 grep 只提取我需要的数字 例如 给定一个文件如下 miss rate 0 21 ipc 222 stalls n shdmem 112 所以说我只想提取数据miss rate这是0 21 如何
  • ngx_http_brotli_filter_module.so" 与 /etc/nginx/nginx.conf:1 中的二进制不兼容

    Using Nginx 1 17 3 and Nginx 1 14 0在两台独立服务器上的 Ubuntu 18 上 两者都显示相同的错误ngx http brotli filter module so is not binary compa
  • java轻量级调试器[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个轻量级的 java 调试器 无论是在 IDE 中还是独立的 命令行或 GUI 中 我正在使用 ant 和 vim 并且尝试过
  • 使用 C++ 更改终端字体大小

    我正在用 C 做一个小项目 在 Ubuntu 11 04 中 该程序是基于文本的 全部在 Gnome 终端中 我正在使用 ncurses 库来更改字体颜色 但我也想将不同大小的文本打印到终端 并且不知道如何使用 ncurses 来做到这一点
  • 如何删除警告:link.res包含输出部分;你忘了-T吗?

    我正在使用 fpc 编译器 我想删除此警告 我已经阅读了 fpc 的选项 但我找不到如何做到这一点 这可能吗 当我运行命令时出现 fpc foo pas out 目标操作系统 Linux for i386 编译 foo pas 链接 p2
  • 如何测量 Linux 中给定进程的活动导致的净使用磁盘空间变化?

    我想监视正在运行的进程的磁盘空间需求 理想情况下 我希望能够指向一个进程并找出由该进程引起的已用磁盘空间的净变化 在 Linux 中是否有一种简单的方法可以做到这一点 我很确定在 Solaris 中使用 DTrace 执行此操作是可行的 尽
  • 打开新选项卡时如何更改终端背景颜色?

    我想通过 ssh 登录远程服务器时更改颜色 这个问题就解决了这个问题 当我 ssh 到特定服务器时 如何使苹果终端窗口自动更改配色方案 https stackoverflow com questions 157959 how do i ma
  • Apache MINA SSHD - 连接到服务器时身份验证方法出现问题

    I am trying to follow Apache MINA s guide https mina apache org sshd project embedding ssh html for setting up a SSHD se
  • Linux C++ 调试器

    我正在寻找完美的 Linux C 调试器 我不期望成功 但搜索应该提供丰富的信息 我是一个非常有能力的 gdb 用户 但 STL 和 Boost 很容易压垮我的调试技能 并不是说我无法深入了解数据结构的内部结构 而是它需要很长时间 我通常会
  • BASH:[ ](测试)行为不一致

    在我的狂欢中test有态度以身份退出0 test n echo true echo false gt true while test n echo true echo false gt false 这意味着当它根本没有收到任何参数时 它假设

随机推荐

  • 表空间的操作

    1 创建表空间 create tablespace tablespace name datafile filepath size filesize autoextend on next autosize maxsize filemaxsiz
  • rule34服务器不稳定,rule34网站

    rule34网站 内容精选 换一换 网站后台数据录入完成后 您需要为您的网站设置便于客户浏览和操作的前台显示界面 本章节主要通过已安装的网站模板指导您完成PC版 手机版网页的制作 以及网站数据的备份 已完成网站后台的设置 并且成功绑定域名
  • 用PyCharm打开已有代码

    一 代码的打开 1 在当前环境 打开新的项目 2 点open 打开文件存放的位置 3 trust Project 4 this window or new window 一般选this window 5 解决代码中的问题 1 一定要解决 2
  • python3 scrapy爬取微信公众号及历史信息V1.0

    环境 python3 scrapy 目的 写这篇文章主要是做一下纪念 毕竟是搞了快两天的东西了 今天加大了量 使用scrapy爬取100多个微信公众号 然后出现IP被封的情况下 当然了 这种情况并不是没有办法解决 只需要在scrapy中进行
  • Java SE学习笔记(五)——数组

    1 包装类 Wrapper Class 针对原生数据类型的包装 所有的包装类 8个 都位于java lang包下 对应8个包装类分别是 Byte Short Integer Long Float Double Character Boole
  • 如何设计一个“正确”的后端接口

    一个后端接口正常情况下会包含 接口地址url 接口的请求方式 get post 请求数据 相应数据 在此记录一下如何构建一个完整的后端接口的过程 无论一个简单还是复杂的接口 无论是对外开放的接口还是http接口 参数校验是比不可少的 因为调
  • 做web开发,怎么能不懂cookie、session和token呢?

    如果把人体比作一个web系统的话 cookie session和token就好像人体的经络和血管一样 而web系统中的数据 就好像人体的血液一样 血液依靠着血管在人体内流动 就如数据根据cookie和session机制在web系统中流动一样
  • 活动报名

    活动议程 日期 8月11日 周五 时间 主题 14 30 14 35 开场简介 吴琦 阿德莱德大学副教授 青源会会员 14 35 15 20 实际应用中的通用视觉与语言方法 聚焦于视觉与语言导航任务 乔滟媛 阿德莱德大学博士后研究员 15
  • vue_02_数据绑定

    1 单向数据绑定 语法 v bind href xxx 或简写为 href 特点 数据只能从 data 流向页面
  • 大乐透分析软件

    大乐透分析软件 1 使用python从网站中爬取所有的大乐透中奖号码 2 使用c 分析红球 蓝球 组合重复出现次数 3 输入红球 蓝球判断历史中奖次数和出现次数 python爬取代码 import os import re import t
  • 【OpenCV图像处理】1.26 直方图反向投影(Back Projection)

    1 相关理论 反向投影 反向投影是反映直方图模型在目标图像中的分布情况 简单点说就是用直方图模型去目标图像中寻找是否有相似的对象 通常用HSV色彩空间的HS两个通道直方图模型 反向投影 步骤 1 建立直方图模型 2 计算待测图像直方图并映射
  • 【SqlServer】如何实现用一个表中的数据修改另一个表中的数据?

    问 我想根据一定的条件实现用一个表中的数据修改另一个表中的数据 这该如何办到呢 答 这有何难 用SQL语言UPDATE嘛 表一 student stu id stu name stu age 1 aa 20 2 bb 21 3 cc 22
  • 小程序跳转外链

    注意 个人类型和海外类型的小程序不支持 web view 标签 直接跳转显示如下页面 解决方案1 将外链地址配置在微信公众的白名单中即可正常跳转 解决方案2 新建一个 fbec number collection用web view承载它以后
  • Oracle-Rman详解

    RMAN 使用详解 一 连接方式 一 连接本地数据库 oracle oracle rman target 二 连接远程数据库 oracle oracle rman target sys oracle orcl 二 基本指令 一 执行 SQL
  • Java线程(从基本概念到线程安全,超详细加大量代码实现)

    线程 线程基本概念 一个线程是一个程序内部的顺序控制流 线程和进程 每个进程都有独立的代码和数据空间 进程上下文 进程切换的开销大 线程 轻量的线程 同一类线程共享和数据空间 每个线程有独立的运行栈和程序计数器 PC 线程切换的开销小 多进
  • 计算机视觉(三):神经网络最优化过程

    计算机视觉笔记总目录 1 最优化 Optimization 定义 最优化是寻找能使得损失函数值最小化的参数 W W W的过程 注 给的是损失优化问题的一个简单定义 并不是完整的最优化数学定义 方法 问题陈述 这节的核心问题是 给定函数 f
  • Search in rotated sorted Array

    算法框架和普通折半查找一样 主要变量就是begin end mid 考虑的区间也一样 都是 begin mid mid mid end 这三种情况 只是判断条件的部分不同 1 若target A mid 返回mid 2 之后只有两种情况 t
  • 跨时钟域传输数据——单bit和多bit信号(总结)

    文章目录 前言 一 慢时钟域到快时钟域 1 单bit信号 2 多bit信号 二 快时钟域到慢时钟域 1 单bit信号 2 多bit信号 三 多bit信号跨时钟域传输 1 多个信号合并 2 多周期路径 Multi cycle Path MCP
  • MySql的增删改查操作(初学者个人心得)

    引言 在上周粗略的学习了有关MySql的相关基础内容 为了方便自己复习 特写下这篇个人心得 来记录MySql有关增删改查操作的内容 MySql学习中最重要的一部分 启动数据库 DOS命令进入mysql的bin文件夹 net start my
  • Linux服务器安全 SSH 用户密钥认证登录

    一 SSH基本简介 SSH 提供两种安全验证方式 1 基于口令 客户端使用账号和口令登录服务器 所有传输数据都会被加密 但可能存在伪造服务器冒充真正的服务器与客户端进行交互 不能避免中间人攻击 2 基于密钥 使用一对密钥 私钥 公钥 将公钥