前言

密钥形式登录的原理是利用密钥生成器制作一对密钥,一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。

下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。

在linux后渗透中拿下shell权限后,使用ssh-keygen命令建立密钥对

服务创建密钥

如上图所示

└─# ssh-keygen          																	# 建立密钥对
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): # 按 Enter回车即可
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): # 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: # 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa # 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub # 公钥
The key fingerprint is:
SHA256:6Nr2bOK9deJLoJZ+tU9jNSGGTlvFunuxYYYBZkI+XpY root@kali
The key's randomart image is:
+---[RSA 3072]----+
| .. .. |
| .. +o .. |
| o+E.+.. |
| o * +o. . |
| . S o +o |
| . o .. o.=. |
| = .+.=+ + |
| =ooo+.=..o |
| .o+==.oo.. |
+----[SHA256]-----+

这里介绍一些ssh-keygen的参数

-t  #指定密钥类型
-b #指定密钥长度

也可以执行

ssh-keygen -t rsa -b 4096   //指定类型长度
ssh-keygen -t rsa //指定类型

密钥锁码在使用私钥时可以输入字符,或留空。

现在当前root目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。

其中,id_rsa 为私钥,id_rsa.pub 为公钥。

在服务器上安装公钥

在安装前先切换目录至.ssh目录,接下来需要安装authorized_keys,授权密钥,安装后需要保证authorized_keys文件权限为600,目录权限为700。

[root@kali ]$ cd .ssh
[root@kali .ssh]$ cat id_rsa.pub >> authorized_keys #公钥的安装注意:单尖括号>表示将文件内容全部替换掉;双尖括号是追加,这样就完成了公钥的安装。
#为了确保连接成功,保证文件权限正确 [root@kali .ssh]$ chmod 600 authorized_keys
[root@kali .ssh]$ chmod 700 ~/.ssh

设置 SSH,打开密钥登录功能

编辑 /etc/ssh/sshd_config 文件,进行如下设置:

    RSAAuthentication yes
PubkeyAuthentication yes PermitRootLogin yes #root 用户允许通过 SSH 登录(可选)

最后,再重启 SSH 服务:(这个重启ssh服务不会导致断连)

[root@host .ssh]$ service sshd restart

将私钥下载客户端连接

在服务器下载下来我们的私钥id_rsa文件,在本地机器使用ssh连接软件连接,如下图所示。

实战连接图片

参考https://www.runoob.com/w3cnote/set-ssh-login-key.html

实战攻防演练-Linux写入ssh密钥,利用密钥登录的更多相关文章

  1. linux下ssh免秘钥登录

    1.检查防火墙是否关闭 (1)切换到root用户 (2)查看防火墙状态 service iptables status 这是没有关闭 (3)设置关闭 service iptables stop 2.检 ...

  2. 【Linux】ssh设置了密钥,但ssh登陆的时候还需要输入密码

    ------------------------------------------------------------------------------------------------- | ...

  3. linux下ssh/scp无密钥登陆方法

    一.双方机器都是root用户登陆方法 A为本地主机(即用于控制其他主机的机器) ;B为远程主机(即被控制的机器Server), 假如ip为192.168.60.110;A和B的系统都是Linux 在A ...

  4. Linux配置SSH端口以及密钥登录

    改端口后重启: vim /etc/ssh/sshd_config systemctl restart sshd

  5. SSH: Linux开启ssh并启动root登录设置默认密码

    apt update && apt install -y openssh-server echo "PermitRootLogin yes" >> /e ...

  6. Linux系统设置 SSH 通过密钥登录

    我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者 ...

  7. Linux中ssh介绍与ssh+key密钥登陆部署

    环境内核信息: [root@zabbix- ~]# uname -a Linux zabbix- -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_64 x86 ...

  8. Mac OS X下配置远程Linux 服务器SSH密钥认证自动登录

    1. 在本地机器创建公钥 打开万能的终端,执行如下命令,无视一切输出,一路欢快地回车即可. ssh-keygen -t rsa -C 'your email@domain.com' -t 指定密钥类型 ...

  9. Linux下 SSH远程管理服务

    第1章 SSH基本概述 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定 在进 ...

  10. linux查看ssh用户登录日志与操作日志

    linux查看ssh用户登录日志与操作日志 2013-11-01转载   ssh用户登录日志 linux下登录日志在下面的目录里:  代码如下 复制代码 cd /var/log 查看ssh用户的登录日 ...

随机推荐

  1. P3755 [CQOI2017]老C的任务题解

    如果询问 \(x_1, y_1, x_2, y_2\), 那么询问 \((x_2, y_2)\), \((x_2, y_1 - 1)\), \((x_1 - 1, y_2)\) \((x_1 - 1, ...

  2. linux_mint_21 vim配置:剪贴板支持和输入法自动切换

    一.vim的剪贴板支持 有的vim版本不支持系统剪切板,也就是说在vim编辑器外面复制的内容,不能够粘贴到vim中;在vim中通过yy.d.c复制剪切的内容也不能粘贴在vim编辑器外面. 这实在是有点 ...

  3. git 访问仓库错误

    通过https访问git出现错误, failed: Error in the pull function 尝试将https改为http

  4. 压制GIF做的一点点小尝试 以及ezgif的基本功能使用

    事情的起因 首先群友给我整了个loli莉音的视频 很可爱 但是用qq接收的视频没法一直在那边kawaii 图片本身很小其实 但是转gif就很大 转出来的gif的大小就大的唏嘘 寻找问题 这就是mp4的 ...

  5. Variable 'xxxx' is accessed from within inner class, needs to be final or effectively final-Lambda 表达式的变量与作用域

    问题的原因 问题代码: public static void main(String[] args) { Integer sum = 0; Integer count = 0; List<Int ...

  6. 最新基于nonebot的qq机器人搭建

    导读 核心资源 ( 参考各项目到各自release下载 NoneBot简介 | go-cqhttp 帮助中心qq登录需要包签名,要自己部署 https://github.com/fuqiuluo/un ...

  7. Print, printf, println的区别

    print 非格式,打印变量的值,不换行 printf 支持格式化输出,不换行 println 非格式,打印变量的值 ,换行

  8. 云原生可观测框架 OpenTelemetry 基础知识(架构/分布式追踪/指标/日志/采样/收集器)

    什么是 OpenTelemetry? OpenTelemetry 是一个开源的可观测性框架,由云原生基金会(CNCF)托管.它是 OpenCensus 和 OpenTracing 项目的合并.旨在为所 ...

  9. flink-cdc同步mysql数据到elasticsearch

    1,什么是cdc CDC是(Change Data Capture 变更数据获取)的简称.核心思想是,监测并捕获数据库的变动(包括数据 或 数据表的插入INSERT.更新UPDATE.删除DELETE ...

  10. Go/C++/Java中的数组对比

    数组是大多数编程语言中的基本数据结构.然而,不同的编程语言对数组的实现和语义有所不同.以下是 Go.C++ 和 Java 中数组的主要区别: 1. 基本性质 Go: 数组是值类型.赋值或将数组传递给函 ...