linux如何验证公钥私钥是否配对shell

linux如何验证公钥私钥是否配对shell,第1张

答:SSH登录提供两种认证方式: 1)口令(密码)认证方式 2)密钥认证方式 本文将讲解怎么利用xshell进行ssh无密码登录,let us begin! 第一步是在xshell中配置公私钥。如下图所示:

RedHat 系统中使用的是: rpm (redhat package manager) 现在称:RPM is Package Manager

Debian : dpt

Ubuntu : apt

在安装软件的时候,有可能出现软件包的相互依赖关系;所以红帽公司推出了:yum(Yellowdog update modifier)

包的组成部分:

主包:

bind-971-1e15i586rpm

子包:

bind-libs-971-1e15i586rpm

bind-utils-971-1e15i586rpm

包名:

PackageName-Version-ReleaseArchrpm

bind-major-minor-releases-releasearchrpm

包名-主版本号-次版本号-发行号-rpm包的制作者的发行号硬件平台rpm

主版本号:重大改进;

次版本号:某个子功能发生重大变化;

发行号:修改BUG,调整了一点功能;

bind-971-1noarchrpm 这里的noarch表示不区分硬件平台,32和64都可以使用;如果是ppc则是在PowerPc上使用的包;

# rpm -ivh /path/to/Package_Name

-i,--install 表示安装

-v 表示显示安装过程的信息

-h 表示以#显示安装的进程,总数为50个;

-vv 显示更详细的过程;

--nodeps 安装的时候忽略依赖关系;

--force 无论之前是否安装过,都强制安装,可以实现重装、降级;

--replacepkgs 重新安装,替换原有的安装;

--oldpackage 对软件包进行降级;

--test Do not install the package, simply check for and report potential conflicts 不进行安装,只测试看在安装的时候有没有依赖包要装;

rpm -q soft_name

# rpm -q >

1、linux秘钥有ssh密钥或SSL密钥,都有公钥和私钥概念,都属于PKI范畴。

私钥包含密码并用来解密,公钥用来加密。

2、ssh-keygen

-t

rsa会在~/ssh生成密钥对

more

id_isa就是私钥,id_isapub为公钥

3、more

id_isa可以看到

-----BEGIN

RSA

PRIVATE

KEY-----

4、ssh-keygen

-l可以查看Show

fingerprint

of

key

file

5、用openssl察看key

openssl

rsa

-in

keypem

-text

-noout

6、SSL证书包含域名和公司信息

openssl

x509

-inform

PEM

-in

sslpem

-noout

-text

shell是渗透中常用的名词,像getshell,webshell,反dshell等等,都和shell相关。

百度百科解释的shell:

在计算机科学中,Shell俗称壳(用来区别于核),是指“为使用者提供 *** 作界面”的软件(命令解析器)。它类似于DOS下的commandcom和后来的cmdexe。它接收用户命令,然后调用相应的应用程序。

简单说用户通过壳访问 *** 作系统内核的服务,也就是由壳到内核,执行系统命令。

getshell:获取到目标的命令执行权限

webshell:指网站后门,通过web服务进行命令执行

反dshell:把命令行的输入输出转移到其它主机

1、webshell下执行命令不交互,为了方便提权或其它 *** 作必须要反dshell。

2、反dshell相当于新增一个后门,当webshell被发现删除后权限不会丢失。

使用whereis命令去确定目标支持的反d方法。

bash反d是实战中用的最多的方法

把命令拆开分析:

1、bash -i代表在本地打开一个bash

2、/dev/tcp/是Linux中的一个特殊设备,打开这个文件就相当于发出了一个socket调用,建立一个socket连接

3、>&后面跟上/dev/tcp/ip/port这个文件代表将标准输出和标准错误输出重定向到这个文件,也就是传递到远程vps

4、远程vps开启对应的端口去监听,就会接收到这个bash的标准输出和标准错误输出。

需要目标主机安装了nc

使用其他版本的 nc

配合命名管道进行反d:

首先使用socket与远程建立起连接,接下来使用到了os库的dup2方法将标准输入、标准输出、标准错误输出重定向到远程,dup2这个方法有两个参数,分别为文件描述符fd1和fd2,当fd2参数存在时,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,在这里可以把fd1和fd2看作是C语言里的指针,将fd1赋值给fd2,就相当于将fd2指向于sfileno(),fileno()返回的是一个文件描述符,在这里也就是建立socket连接返回的文件描述符,打印出来数值为3

0代表标准输入、1代表标准输出、2代表标准错误输出、3代表重定向到远程

接下来使用os的subprocess在本地开启一个子进程,传入参数“-i”使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样的话就可以在远程执行输入命令了。

需要php关闭safe_mode选项,才可以使用exec函数。

使用php的exec函数执行方法1反dshell的命令

使用php的fsockopen去反dshell

exec反d

perl反d

ruby反d

lua反d

通过上述命令反dshell得到的shell并不能称为完全交互的shell,通常称之为'哑'shell。

通常存在以下缺点

因此有必要去获取一个完全交互的shell。

1、在哑 shell 中执行python,使用pty模块,创建一个原生的终端,命令如下:

运行完后

2、键入 Ctrl-Z暂停任务,切回到 VPS 的命令行中;在 VPS 中执行:

3、在哑 shell 中执行,得到一个完全交互的shell,支持命令补全、历史命令查看、语法高亮、vim编辑等功能。

部分防护设备会对内外网传输流量进行审查,反dshell执行命令都是以明文进行传输的,很容易被查杀。

因此需要将原始流量使用 openssl 加密,绕过流量审计设备。

1、首先vps上生成SSL证书的公钥/私钥对,信息懒得填,一直回车即可。

2、vps使用 OpenSSL 监听一个端口

3、目标主机执行反d加密shell

反d成功,成功接收到ssl流量加密的shell。

>

[TOC]

ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,下面以CentOS为例。有机器A(1921686421),B(1921686422)。

目标:A通过ssh免密码登录到B

特意强调,使用参数可以省去生成公钥/私钥的回车步骤

备注:

第一次登录需输入yes,现在A机可以无密码登录B机了,B登陆A,也同样,在B中生成公钥和私钥对,将公钥写入authorized_keys中,然后同步A、B中的authorized_keys,使其一致就ok了。

也即就是:登录的机子有私钥,被登录的机子要有登录机子的公钥,这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法(不对称加密算法)的公钥/私钥对,当然也可以用dsa(对称加密算法:对应的文件是id_dsa,id_dsapub)

SSH是为建立在应用层和传输层基础上的安全协议( OSI七层与TCP/IP五层网络架构详解 )。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH 协议可以有效防止远程管理过程中的信息泄露问题。

从客户端来看,SSH提供两种级别的安全验证:

只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。以下是登录验证流程:

​ 当第一次链接远程主机时,会提示你当前主机的”公钥指纹”,询问你是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/ssh/known_hosts文件中。

这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。

1、在客户端打开终端,执行 ssh-keygen ,该命令会默认在 ~/ssh/ 目录下创建 id_rsa 、 id_rsapub 两个文件,分别为你的公钥和私钥

2、将公钥 id_rsapub 文件拷贝到服务器端的 ~/ssh/authorized_keys 文件中,可通过scp拷贝

A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。非对称加密,公钥加密的密文不能公钥解开,只能私钥解开

ssh-agent

ssh-agent是密钥管理器,是一种控制用来保存公钥身份验证所使用的私钥的程序

运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程

ssh-agent是管理多个ssh key的代理,受管理的私钥通过ssh-add来添加

好处1:不用重复输入密码

用 ssh-add 添加私钥时,如果私钥有密码的话,照例会被要求输入一次密码,在这之后ssh-agent可直接使用该私钥,无需再次密码认证。

好处2:不用到处部署私钥

假设私钥分别可以登录同一内网的主机 A 和主机 B,出于一些原因,不能直接登录 B。可以通过在 A 上部署私钥或者设置 Forwarding(转发) 登录 B,也可以转发认证代理连接在 A 上面使用ssh-agent私钥登录 B;可以在A上直接sftp传文件到B上。

如这边有一台机器是local,能通过公钥直接登陆server1和server2。server1和server2之间无公钥登陆。

现在要在server1上直接登陆server2,在local上执行

执行了之后就将私钥给ssh-agent保管了,server1上面登陆server2的时候,需要私钥验证的时候直接找ssh-agent要就可以了

接下来登陆server1,注意-A

可以发现server1上多了/tmp/ssh-xxxxxxxxx/agentxxxxx的socket,之后神奇的事发生了,在 server1上可直接进server2,只需执行如下命令,如果加了-A则可以继续ssh forwarding(转发) ,以至无限的机器forwarding。

ssh (-A) server2

同样的原理可以试一下sftp, scp等基于ssh的命令。

如运行ssh-add,遇到 Could not open a connection to your authentication agent。

解决: 需要ssh-agent启动bash,或者说把bash挂到ssh-agent下面。

1 ssh免密码登陆及其原理

我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。

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

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

1 制作密钥对

首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:

[root@host ~]$ ssh-keygen <== 建立密钥对

Generating public/private rsa key pair

Enter file in which to save the key (/root/ssh/id_rsa): <== 按 Enter

Created directory '/root/ssh'

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_rsapub <== 公钥

The key fingerprint is:

0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。

现在,在 root 用户的家目录中生成了一个 ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsapub 为公钥。

2 在服务器上安装公钥

键入以下命令,在服务器上安装公钥:

[root@host ~]$ cd ssh

[root@host ssh]$ cat id_rsapub >> authorized_keys

如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:

[root@host ssh]$ chmod 600 authorized_keys

[root@host ssh]$ chmod 700 ~/ssh

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

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

RSAAuthentication yes

PubkeyAuthentication yes

另外,请留意 root 用户能否通过 SSH 登录:

PermitRootLogin yes

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

PasswordAuthentication no

最后,重启 SSH 服务:

[root@host ssh]$ service sshd restart

4 将私钥下载到客户端,然后转换为 PuTTY 能使用的格式

使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你刚才设置了密钥锁码,这时则需要输入。

载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。

今后,当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。

以上就是关于linux如何验证公钥私钥是否配对shell全部的内容,包括:linux如何验证公钥私钥是否配对shell、Linux入门系列——软件包管理、秘钥 包含 哪些信息 linux等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9598566.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存