CentOS7下配置使用JumpServer 堡垒机 (图文教程)

前面介绍了如何在《CentOS7下搭建JumpServer 堡垒机》,基于这篇文章的环境搭建过程,接着介绍安装后的的功能配置使用。

  • 首次wbe登录,http://ip:80,默认账号密码:admin,admin;这里自定义密码修改:admin@123

 

 用户管理项

创建系统角色

 

 

 创建用户

 

创建用户组

 

资产管理项

创建资产

  • 左侧是资产树,右击“Default”可以新建、删除、更改树节点,授权资产也是以节点方式组织的,右侧是属于该节点下的资产。

 

 创建网域

  • 网域功能是为了解决部分环境(如:混合云)无法直接连接而新增的功能,原理是通过网关服务器进行跳转登录。JMS => 网域网关 => 目标资产。

 

 创建系统用户

  • 系统用户 是JumpServer 登录资产时使用的账号,如 root `ssh root@host`,而不是使用该用户名登录资产(ssh admin@host)`;
  • 特权用户 是资产已存在的, 并且拥有 高级权限 的系统用户, JumpServer 使用该用户来 `推送系统用户`、`获取资产硬件信息` 等;
  • 普通用户 可以在资产上预先存在,也可以由 特权用户 来自动创建。

 

  •  特权用户 是资产已存在的, 并且拥有 高级权限 的系统用户, 如 root 或 拥有 `NOPASSWD: ALL` sudo 权限的用户。 JumpServer 使用该用户来 `推送系统用户`、`获取资产硬件信息` 等。

 

 命令过滤

  • 系统用户支持绑定多个命令过滤器实现禁止输入某些命令的效果;过滤器中可配置多个规则,在使用该系统用户连接资产时,输入的命令按照过滤器中配置的规则优先级生效。
  • 例:首先匹配到的规则是“允许”,则该命令执行,首先匹配到的规则为“禁止”,则禁止该命令执行;如果最后未匹配到规则,则允许执行。

 

 

 

权限管理

创建资产授权规则

 

 

 

测试命令过滤规则

 

 

 

 

去除web终端水印

 

 

重置Web登录密码

  • 如果忘了密码或者密码过期,可以点击找回密码通过邮件找回
  • 如果无法通过邮件找回,可以通过admin控制台重置
  • 如果是admin用户,可以通过JumpServer 宿主机上重置
[root@JumpServer ~]# docker exec -it jms_core /bin/bash
root@44c9b78172ce:/opt/jumpserver# cd /opt/jumpserver/apps
root@44c9b78172ce:/opt/jumpserver/apps# python manage.py shell
Python 3.8.16 (default, Dec 21 2022, 09:26:59) 
Type 'copyright', 'credits' or 'license' for more information
IPython 8.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: from users.models import User

In [2]: u = User.objects.get(username='admin')

In [3]: u.reset_password('admin@456')

In [4]: u.save()

In [5]: exit
root@44c9b78172ce:/opt/jumpserver/apps# exit
exit
# admin 为你要修改的账户名称,password 为你要修改的密码

登录频繁账号被锁定

找管理员重置,管理员可以在对应用户的个人页面重置
或者通过下面的 shell 解决

docker exec -it jms_core /bin/bash
cd /opt/jumpserver/apps
python manage.py shell

from django.core.cache import cache
cache.delete_pattern('_LOGIN_BLOCK_*')
cache.delete_pattern('_LOGIN_LIMIT_*')

 其他问题

资产测试可连接性、更新硬件信息 报 Permission denied 或者 Authentication failure
一般都是管理用户账户密码不正确

资产测试可连接性、更新硬件信息 报 /usr/bin/python: not found
在一般是资产 python 未安装或者 python 异常,一般出现在 ubuntu 资产上

系统用户测试资产可连接性错误
确定系统用户是否正确,如果系统用户使用了自动推送,确保管理用户正确
系统用户设置为 root 的情况下,请关闭自动推送,并输入正确的 root 密码

Connect websocket server error
一般情况下 nginx 未配置 websocket 导致,根据反向代理文档进行修改后重启 nginx 即可

提示 timeout
# 手动 ssh 登录提示 timeout 的那台服务器
vi /etc/ssh/sshd_config
UseDNS no

# 重启 JumpServer 服务器的 docker
systemctl restart docker
docker restart jms_koko

至此,CentOS7下配置使用JumpServer 堡垒机的基本功能已完成。

********************如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】/【赞助】按钮,因为您的支持是我继续写作,分享的最大动力!********************
本文转载于网络 如有侵权请联系删除

相关文章

  • 安卓手机上安装Linux开源模拟器-Termux

    什么是TermuxTermux是一款基于Android平台的开源Linux终端模拟器,使用pkg(apt)进行软件包的管理。最重要的是,它无需手机root权限,因此,绝大多数Android都可以运行。Termux本质上是一个终端模拟器加上一套Linux的最小系统。这里的系统指的是用户态的系统,最终还是要运行在下面的Linux内核上的,而且受到Android系统本身的安全限制。比如在没有root的系统上无法访问特定路径或者没有写入权限。Termux可以做什么目前来说,它能做一些简单的Linux任务享受Bash和Zsh 运行Nginx,MySQL,Redis等服务器软件 使用Vim编辑文件 通过SSH访问服务器 使用GCC和Clang编译代码 使用Git检查项目复制一、安装Termux无需多言,首先你需要一个按说手机,再下载按说app。开源地址:https://github.com/termux/termux-appAPP下载地址:https://github.com/termux/termux-app/releaseshttps://f-droid.org/en/packages/com

  • 学会 Java 数据结构,想不飘都难!

    大家好,我是沉默的王二。今天我们来学一下数据结构方面的知识,对扎实Java的基本功非常有用,学会了就会有一种自带大佬的感觉,嘿嘿。数据结构,也就是DataStructure,是一种存储数据的结构体,数据与数据之间存在着一定的关系,这样的关系有数据的逻辑关系、数据的存储关系和数据的运算关系。在Java中,数据结构一般可以分为两大类:线性数据结构和非线性数据结构。哈哈,这个非字很有灵魂吧?先来说线性数据结构吧。1)数组一眼看上去就知道的,像String[]、int[]这种;还有需要看两眼才能看透的(看源码了),像ArrayList,内部对数组进行了封装。数组这种数据结构最大的好处,就是可以根据下标(或者叫索引)进行操作,插入的时候可以根据下标直接插入到具体的位置,但与此同时,后面的元素就需要全部向后移动,需要移动的数据越多,就越累。假设现在已经有了一个ArrayList了,准备在第4个位置(下标为3)上添加一个元素55。此时ArrayList中第5个位置以后的元素将会向后移动。准备把23从ArrayList中移除。此时下标为7、8、9的元素往前挪。简单总结一下ArrayList的时间复杂度

  • springboot 自动配置和拦截器相关

    我们可以通过启用debug=true属性;来让控制台打印自动配置报告,这样我们就可以很方便的知道哪些自动配置 类生效;========================= AUTO‐CONFIGURATIONREPORT ========================= Positivematches:(自动配置类启用的) ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ DispatcherServletAutoConfigurationmatched: ‐@ConditionalOnClassfoundrequiredclass 'org.springframework.web.servlet.DispatcherServlet';@ConditionalOnMissingClassdidnotfind unwantedclass(OnClassCondition) ‐@ConditionalOnWebApplication(required)foundStandardServletEnvironment (OnWebApplicationCondition) Negati

  • 统一响应数据的封装

    1.响应数据的格式现在不会点前后端分离都不好意思,在分离的环境中,我们前后交互就显得尤为重要。前端按照接口文档中的URL地址和参数要求发送请求,接着后端对业务进行处理就响应约定格式的数据,这种约定的格式常见如下:{ "code":"返回的状态码", "msg":"返回的信息描述", "data":"返回的数据" }复制后端一般返回JSON格式的数据1.1状态码划分当然这个code各自有不同的规范,可以参考HTTP的状态码进行区间划分区间表示的错误0000表示响应成功1000~1999表示参数错误2000~2999表示用户错误3000~3999表示接口异常4000表示服务端错误1.2状态码的封装我们常用枚举来进行状态码及其提示的统一封装,便于管理publicenumStatusCodeEnum{ SUCCESS("0000","成功"), PARAM_TYPE_ERROR("1000","参数类型

  • Java14来了!Switch竟如此简单?Lombok也不需要了?来用Idea搭建Java14吧!

    Java14在2020.3.17日发布正式版了,但现在很多公司还在使用Java7或Java8,每当看到Java又发布新版本心里就慌得一匹。不过此版本并不是LTS(长期支持版)版本,所以不要慌,我们先来了解一下好了,等LTS版本发布后再用也不迟。版本说明现在Java的发布节奏是每年发布两个GA(GeneralAvailability,正式发布版),每6个月发布一版,发布月份为3月和9月。Oracle只对LTS版本提供付费支持,其中包括Java8和Java11,Java11的付费支持会持续到2026年,每3年发布一个LTS版,下一个LTS版本将是Java17。Java版本的快速更新,一定程度上是为了迎合了开发者和现在技术发展的潮流,同时也利于Java版本的交付,把大版本拆成小版本,起码不会出现大的延期了。Java14新特性此版本包含的JEP(Java/JDKEnhancementProposals,JDK增强提案)比Java12和Java13加起来都多,总共16个新特性。305:instanceof的模式匹配(预览)343:打包工具(Incubator)345:G1的NUMA内存分配优化3

  • 扭曲数据的九大手段!数据分析师速度传阅,人手一份

    做数据分析,有数据才能分析 如果数据是不真实的呢?如果数据是人为扭曲的呢?如果数据被人为扭曲,还要求你接受呢?今天我们就来讨论这个话题。趁着还没过春节,我们把这些糟心事一次说干净,大家收拾收拾心情辞旧迎新。以下是最常见的九大手段,大家先牢记于心。很有可能你会在年终总结、年度规划、活动评估等场合遇到它们。提前了解,也好早早应对。段位一:虚报数据业务方故意虚报、谎报、不报数据,导致基础数据缺失,错误频发。这种情况在用纸质单张的年代很常见。不过随着数据系统的普及,此问题已经越来越少。如果现在还有使用纸质单张的场景,比如用户纸质申请表、调查问卷等,此问题依然会存在。解决方案也很简单:上微信卡包呀!啥年代了注册个会员还写纸质单。段位二:人为改数参见:系统是死的,可人是活的。想解决,只能加强考核,对违规操作的人严惩不贷。这些操作的规律性很强,且和具体人的行为高度绑定,通过分析是可以识别的。段位三:修改口径数据不好看了,怎么办?直接改统计口径!本质上讲,数据指标是为了计算方便而设的,作为使用方业务方想咋改就咋改。但是因为改动口径,导致前后数据不一致,就是大问题。只改统计口径、不改指标名字,更是鱼目混

  • 基于spring security实现接口权限控制

    基于springsecurity实现接口权限控制一、基于注解 (1)在security配置文件上配置@EnableGlobalMethodSecurity(prePostEnabled=true)注解 (2)在具体类上加@PreAuthorize("hasAuthority('admin_s1')")或者方法上加上@PreAuthorize("hasAuthority('admin_s1')") 代码示例如下packagecom.ysh.springboot.test.config; importcom.sayo.authlogin.auth.JwtAuthenticationFilter; importcom.sayo.authlogin.service.DatabaseUserDetailService; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.beans.facto

  • Web日志安全分析技巧

    ox01Web日志Web访问日志记录了Web服务器接收处理请求及运行时错误等各种原始信息。通过对WEB日志进行的安全分析,不仅可以帮助我们定位攻击者,还可以帮助我们还原攻击路径,找到网站存在的安全漏洞并进行修复。我们来看一条Apache的访问日志:127.0.0.1--[11/Jun/2018:12:47:22+0800]"GET/login.htmlHTTP/1.1"200786"-""Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/66.0.3359.139Safari/537.36"复制通过这条Web访问日志,我们可以清楚的得知用户在什么IP、什么时间、用什么操作系统、什么浏览器的情况下访问了你网站的哪个页面,是否访问成功。本文通过介绍Web日志安全分析时的思路和常用的一些技巧。0x02日志分析技巧在对WEB日志进行安全分析时,一般可以按照两种思路展开,逐步深入,还原整个攻击过程。第一种:确定入侵的时间范围,以此为线索,查

  • Windows注册表操作基础代码

    Windows注册表操作基础代码   Windows下对注册表进行操作使用的一段基础代码Reg.h:#pragma once #include<assert.h> #include<windows.h> class Reg {     HKEY hkey; public: void open(HKEY root,char*subKey);//打开注册表键,不存在则创建 void del(HKEY root,char*subKey);//删除注册表键 void close();//关闭注册表键 void setValue(char*name,char*data);//设置注册表值,不存在则创建 void getValue(char*name,char*value);//获取注册表值 void delValue(char*name);//删除注册表值 }; void Reg::open(HKEY root,char*subKey) { long lret=RegCreateKeyEx(root,(LPCTSTR)subKey,0,NULL,REG_OPTION_N

  • Parallels Desktop 18 for Mac(pd虚拟机)激活版

    ParallelsDesktop18可以在Mac计算机上下载并安装Windows操作系统。在Mac与Windows之间无缝复制和粘贴文本或拖放对象。在Mac虚拟机中跨多个操作系统开发和测试。毫不费力地运行Windows应用程序,不会减慢Mac的运行速度。 ParallelsDesktop18forMac新增功能ParallelsDesktop18包含20多种强大的必备功能(针对macOSVentura、Intel和AppleM系列芯片进行了优化),拥有提升性能所需的一切。易于安装–点击一下,即可下载、安装和配置Windows11。面向最新的Apple硬件进行了优化-改进了与AppleProMotion技术的兼容性,优化了Mac和Windows之间的同步。游戏体验得到增强-自动使用Xbox或DualShock蓝牙控制器,尽享终极游戏体验。​软件下载地址:ParallelsDesktop18forMac(pd虚拟机)v18.0.1(53056)激活版https://www.macz.com/mac/8157.html?id=NzY4OTYwJl8mMjcuMTg3LjIyNy4xMDA%3

  • 索引型sitemap是什么,索引型sitemap百度将不予处理,索引型sitemap百度将不予处理

    2020年7月8日百度搜索资源平台发布了sitemap提交方式优化公告,这次主要是提高百度处理sitemap文件的效率,同时打击一些站群和泛目录之类的网站,减少他们的收录,并且在百度资源平台sitemap提交入口出现提示:请勿提交索引型sitemap,索引型不予处理且子文件会占用配额,如若提交请主动删除。 尊敬的搜索合作伙伴:为了提升sitemap文件的处理效率,即日起搜索资源平台的普通收录和死链提交工具均不再支持索引型sitemap文件(即xml文档嵌套xml文档)。已提交的索引型文件不予处理,且子文件会占用相应工具的配额,请及时删除已提交的索引型sitemap文件。感谢您的关注与支持!索引型sitemap是什么首先,我们弄清楚什么是索引型sitemap,简单来说就是一个sitemap里面还放了多个sitemap链接地址。您可以提供多个Sitemaps文件,但提供的每个Sitemaps文件包括的网址不得超过50,000个,并且未压缩时不能大于10MB(10,485,760)。这些限制条件有助于确保Web服务器不会因传输非常大的文件而遇到麻烦。如果要列出超过50,000个网址,您需要创

  • stm32 sd卡读写_sd卡引脚定义图

    大家好,又见面了,我是你们的朋友全栈君。SD卡 SD卡(SecureDigitalMemoryCard)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。 SD卡按容量分类,可以分为3类:SD卡、SDHC卡、SDXC卡 容量命名简称 0~2GStandardCapacitySDMemoryCardSDSC或SD 2G~32GHighCapacitySDMemoryCardSDHC 32G~2TExtendedCapacitySDMemoryCardSDXCSD卡一般支持SDIO和SPI俩种传输方式注意:很大一部分TF卡(小卡)不支持SPI访问,用SPI方式最好使用大卡SD卡的SDIO模式及SPI模式引脚的定义如下SD卡的5个寄存器名称宽度描述CID128卡标识寄存器,提供制造商ID、OEM/应用ID、产品名称、版本、序列号、制造日期等信息。RCA16相对卡地址(Relativecardad

  • 云锵基金 2019 年 07 月简报

    概况: 目前持仓:¥********.**;总资金:¥********.**;仓位:88.04%。本月涨幅-3.72%。 同期上证指数:-1.56%;云锵本月再次跑输大盘,收益率表现极差。 自动化: 随着前期的问题逐渐修复完毕,目前自动化系统比较稳定,最近四月未再出现任何BUG。 量化策略: 本月核心量化策略未有变化,版本号:YQ3.2,资金占比80%。 在YQ3.2中,大小盘的资金配比是:40%、60%。YQ3.2策略本身本月测试的收益率为:-3.39%,表现极差。 本月已经试运行了新研发的动态策略YQ4.0,收益率为:1.39%,但是未部署真实资金,表现极优。 人工策略与干预: 20%的资金部署在手工策略:涨停战法中。该战法本月收益率-4.93%,表现极差。目前该策略净值为0.886,按上个月计划,该策略的仓位调整为10%。如果净值下降到0.8,则停止使用此人工策略。 后续计划: 下个月对于YQ4.0策略,准备上实盘。原计划7月到位的100多万资金延迟到位。目前决定从3.2中抽取出40%左右资金来部署YQ4.0。 最近两个月YQ3.2战绩连续跑输大盘,且看YQ4.0上线后的实盘效果

  • Windows注册表中修改CMD默认路径

      一、开启注册表“win键+R键”并输入regedit 二、在注册表项 HKEY_CURRENT_USER\ Software\ Microsoft\ CommandProcessor 新建一个项,并修改数据为“cd/dC:\”,在/d空格后就是你要的路径 修改成功是这样的     作  者: Jony.K.Chen 出  处:http://www.cnblogs.com/lxcy/ 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。 特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。 声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!

  • 【YBTOJ】【Luogu P3966】[TJOI2013]单词

    链接: 洛谷 题目大意: 求每个单词分别在论文中出现了多少次。 正文: 对于整篇“论文”,也就是文本串,其实就是各个“单词”,即模式串,连接而成,而且有分隔符。 那么接下来就与二次加强的AC自动机板子一模一样了:因为直接跳失配指针会被卡,所以建fail树,然后跑DFS或者拓扑。 代码: constintN=3e6+10,M=160; inlinellRead() { llx=0,f=1; charc=getchar(); while(c!='-'&&(c<'0'||c>'9'))c=getchar(); if(c=='-')f=-f,c=getchar(); while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar(); returnx*f; } intn; namespaceAC { intt[N][30],id[N],val[N],cnt[N],fail[N]; inttot; voidInsert(char*s,intI) {

  • UOJ 310 黎明前的巧克力(FWT)

      【题目链接】 http://uoj.ac/problem/310   【题目大意】   给出一个数集,A从中选择一些数,B从中选择一些数,不能同时不选  要求两者选择的数异或和为0,问方案数   【题解】   题目等价于选取一个非空且xor为0的集合并将其拆分为两个子集的方案数  用dp表示xor为j的方案数,易得dp方程dp[i][j]=dp[i-1][j]+2*dp[i-1][j^a[i]]  该式等价于dp数组与只有两个元素有值的g[0]=1,g[a[i]]=2的数组做卷积运算  对g数组进行反演可以发现每次卷积的数组只包含3和-1,  那么我们只要知道对一个下标来说,做的n次卷积中有几个3和-1,  就能够直接乘算出答案,根据FWT的和等于和的FWT,我们将多次需要做卷积的数组相加,  一并做FWT,得到他们和的反演值,在每个位置解关于3和-1的二元一次方程组,  再将其替换为正确值,最后FWT求逆之后下标为0的答案减去1就是答案,  减一是因为两个人取数不能同时为空。   【代码】 #include<cstdio&

  • pacman总结

    S指令 #安装包 #S=sync pacman-Svim #更新索引 pacman-Sy #强制更新索引 pacman-Syy #更新所有的软件包到最新版本 pacman-Su #更新软件索引,并更新软件 pacman-Syu #从索引中搜索软件包 pacman-Ssvim pacman-Ss^vim#正则搜索 #删除下载缓存 pacman-Sc 复制 R指令 #删除单个软件包 pacman-Rvim #删除软件包,并且删除该包依赖的软件包 pacman-Rsvim #删除软件包,并且删除该包的全局配置文件 pacman-Rnvim #常用的删除,删除包、它依赖、配置文件 pacman-Rnsvim #删除包、以及递归依赖它的包,慎用 pacman-Rcsvim#所有依赖的vim的包也会被删除 复制 Q指令 #查询所有安装的软件 pacman-Q #查询自己安装的软件包 pacman-Qe #查看本地软件包 pacman-Qsvim #查看不再被使用的依赖 pacman-Qdt #删除不再需要的依赖 pacman-R$(pacman-Qdtq) # 复制

  • Winform TreeView 添加节点

    //添加根节点 vard1=tv.Nodes.Add("全部");//把内容作为根节点添加 //添加子节点 TreeNodetnn=newTreeNode(); tnn.Tag="123"; tnn.Text="11212312"; d1.Nodes.Add(tnn);复制  

  • mysql在docker中的实现

    部分图片显示问题,附上有道云笔记的链接:http://note.youdao.com/noteshare?id=e2a253b5fb67fb607ed8be1a7cb08243&sub=0AC8BE346E394481972432FEABBE2861 docker中mysql数据库的正确使用方式 项目背景 项目中,使用docker部署mysql服务,如果将mysql存储的数据保存在docker的容器中,一旦docker关闭,会导致存储的的数据丢失,因此,需要将docker中mysql的数据实时保存在宿主机上,从而当docker关闭,再次启动docker时,也能够正常使用数据,不会造成数据丢失现象。 分析mysql的配置文件/etc/my.cnf 其中,datadir为mysql数据存储的位置,默认/var/lib/mysql/ 复制 指定docker与宿主机共享的目录 启动命令 dockerrun-itd--privileged--namenode3--hostnamenode3--netov_net1--rm-v/mnt/cdrom:/mnt/cdrom-v/root/

  • 第一冲刺阶段——站立会议第四天4月21日

    一、站立会议信息   此次站立会议,我们每个人对自己已经完成的任务进行简要的分析,说明自己所遇到的困难,更新任务看板以及燃尽图,并且每个人决定了今天将要进行的工作任务。   站立会议照片: 二、任务进度    1、完成了软件logo的设计,主界面的页面设计大致完成;   2、通过sqlite来实际加入数据和通过这个数据库来完成登录验证;   3、启动界面上的小组名称“101小分队”的logo设计完成;   4、作业布置的基本功能也差不多实现了。   具体每日进度见小组成员个人博客:   罗毅:http://www.cnblogs.com/ly199553/p/5425390.html   苗堃:http://www.cnblogs.com/brucekun/p/5417674.html   张莹荧:http://www.cnblogs.com/zhyying/p/5422545.html 三、任务看板 四、燃尽图

  • c++一个源文件到可执行文件的过程

    参考学习链接 https://blog.csdn.net/sheng_ai/article/details/47860403 分为四个过程 1.预处理(生成.i文件) 2.编译(生成.s文件) 3.汇编(生成.o或.obj文件) 4.链接(生成.out或.exe文件,对应Linux和Windows吧)   先说一下预处理阶段干的事情 c++预处理器提供了预处理命令 #define宏定义 #undef取消宏定义 #else#elif#endif#error #if,#ifdef....... 这些命令在编译之前完成 a.对所有的“#define”进行宏展开;b.处理所有的条件编译指令,比如“#if”,“#ifdef”,“#elif”,“#else”,“#endif”c.处理“#include”指令,这个过程是递归的,也就是说被包含的文件可能还包含其他文件d.删除所有的注释“//”和“/**/”e.添加行号和文件标识f.保留所有的“#pragma”编译器指令  经过预处理后的.ii文件不包含任何宏定义,因为所有的宏已经被展开,并且包含的文件也已经被插入到.i

相关推荐

推荐阅读