{"id":42680,"date":"2023-12-01T18:19:32","date_gmt":"2023-12-01T01:36:20","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/"},"modified":"2024-05-04T11:40:10","modified_gmt":"2024-05-04T03:40:10","slug":"%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/","title":{"rendered":"\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u7531\u4e8eAnsible\u7684\u5b89\u88c5\u5728\u793e\u4ea4\u5708\u4e2d\u975e\u5e38\u666e\u904d\uff0c\u8fd9\u91cc\u53ea\u662f\u4e3a\u4e86\u81ea\u5df1\u505a\u4e2a\u5907\u5fd8\u5f55\uff0c\u56e0\u4e3a\u6211\u4ece\u672a\u771f\u6b63\u5c1d\u8bd5\u8fc7\u5b83\u3002<\/p>\n<h1>\u5b89\u88c5\u65b9\u5f0f<\/h1>\n<p>\u6839\u636e\u62a5\u544a\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u6dfb\u52a0epel\u8f6f\u4ef6\u5e93<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u5b89\u88c5ansible<\/ol>\n<p>\u542c\u8bf4\u53ea\u9700\u8981\u4e24\u62db\u5c31\u80fd\u7ed3\u675f\u4e86&#8230;\u771f\u5feb\u3002<\/p>\n<h1>\u5b89\u88c5\u6b65\u9aa4<\/h1>\n<pre class=\"post-pre\"><code>epel \u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u8ffd\u52a0\r\n#sudo amazon-linux-extras install epel\u3000\u2190AWS\u4e0a\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u306f\u30b3\u30c3\u30c1\u3092\u5b9f\u884c\u3059\u308b\r\n# yum install epel-release \u2190\u5f8c\u3067\u308f\u304b\u308b\u304c\u3053\u3063\u3061\u3067\u306f\u3046\u307e\u304f\u3044\u304b\u306a\u3044\r\n\r\nansible \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\r\n# yum install ansible\r\n<\/code><\/pre>\n<h1>\u8bd5\u8bd5\u770b<\/h1>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/10-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u6dfb\u52a0epel\u5b58\u50a8\u5e93\uff0c\u4f46\u5c1d\u8bd5\u540e\u53d1\u73b0\u5931\u8d25\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>sudo amazon-linux-extras install epel\r\n<\/code><\/pre>\n<p>AWS\u7684\u60c5\u51b5\u4e0b\uff0c\u4f3c\u4e4e\u53ef\u4ee5\u901a\u8fc7\u6267\u884c\u2191\u2191\u6765\u5b9e\u73b0\u7c7b\u4f3c\u7684\u529f\u80fd\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/14-0.png\" alt=\"image.png\" \/><\/div>\n<p>\u65e2\u7136\u65e0\u53ef\u5948\u4f55\uff0c\u6211\u4f1a\u7167\u7740\u6240\u8bf4\u7684\u53bb\u8bd5\u8bd5\u770b\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/16-2.png\" alt=\"image.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/17-0.png\" alt=\"image.png\" \/><\/div>\n<h1>\u5b89\u88c5ansible<\/h1>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/19-1.png\" alt=\"image.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/20-0.png\" alt=\"image.png\" \/><\/div>\n<h1>Ansible\u7684\u57fa\u672c\u8bbe\u7f6e<\/h1>\n<h2>sshd\u7684\u914d\u7f6e\u66f4\u6539<\/h2>\n<p>\u8fd9\u4e2a\u662f\u5173\u4e8eSSH\u5ba2\u6237\u7aef\u7684\u95ee\u9898\uff0c<br \/>\n\u5982\u679c\u4f7f\u7528\u9ed8\u8ba4\u51c6\u5907\u597d\u7684EC2\u7684sshd\uff0c<br \/>\n\u6bcf\u6b21SSH\u8fde\u63a5\u90fd\u4f1a\u8981\u6c42\u8f93\u5165\u5bc6\u7801\u3002<br \/>\n\u6240\u4ee5\u6211\u60f3\u627e\u4e2a\u89e3\u51b3\u65b9\u6cd5\u3002<\/p>\n<p>\u636e\u62a5\u544a\uff0c\u53ef\u4ee5\u6309\u7167\u4ee5\u4e0b\u65b9\u5f0f\u8fdb\u884c\u4fee\u6b63\u3002<\/p>\n<pre class=\"post-pre\"><code>PermitRootLogin yes\r\n\u3092\r\nPermitRootLogin without-password\r\n\u306b\u4fee\u6b63\r\n<\/code><\/pre>\n<p>\u5b8c\u6210\u4fee\u6539\u540e\uff0c\u91cd\u65b0\u52a0\u8f7dsshd\u3002<\/p>\n<pre class=\"post-pre\"><code>systemctl reload sshd.service\r\n<\/code><\/pre>\n<p>\u5728\u8fdb\u884cSSH\u8fde\u63a5\u65f6\uff0c<br \/>\n1. \u786e\u4fdd\u516c\u94a5\u5df2\u6dfb\u52a0\u5230~\/.ssh\/authorized_keys\u6587\u4ef6\u4e2d<br \/>\n2. \u786e\u4fdd\u79c1\u94a5\u5b58\u50a8\u5728~\/.ssh\/id_rsa\u6587\u4ef6\u4e2d<br \/>\n\u7136\u540e\u8fdb\u884c\u8fde\u63a5\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code>ssh [\u30e6\u30fc\u30b6\u540d]@[\u63a5\u7d9a\u5148IP\u30a2\u30c9\u30ec\u30b9]\r\n\u4eca\u56de\u306e\u5834\u5408\u3060\u3068\u3001\u3001\u3001\r\nssh ec2-user@172.19.176.92\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/31-0.png\" alt=\"image.png\" \/><\/div>\n<h2>\u521b\u5efaansible-repo<\/h2>\n<p>\u867d\u7136\u201c\u6700\u4f4e\u9650\u201d\u4e00\u8bcd\u53ef\u80fd\u4f1a\u6709\u8bef\u89e3\uff0c\u4f46\u8981\u786e\u4fdd\u7406\u89e3\u8fd0\u884c\u73af\u5883\u3002<br \/>\n\u5728\u4e3b\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a\u540d\u4e3a\u201cansible-repo\u201d\u7684\u6587\u4ef6\u5939\u3002<\/p>\n<pre class=\"post-pre\"><code>cd ~\r\nmkdir ansible-repo\r\ncd ansible-repo\r\n<\/code><\/pre>\n<h2>\u521b\u5efahosts\u6587\u4ef6<\/h2>\n<p>\u5728\u4f7f\u7528ansible\u6307\u5b9a\u8fde\u63a5\u76ee\u6807\u65f6\uff0c\u9700\u8981\u9884\u5148\u5c06\u4e3b\u673a\u4fe1\u606f\u6ce8\u518c\u5230hosts\u6587\u4ef6\u4e2d\u3002<br \/>\n\u901a\u5e38\uff0c\u8fd9\u4e2ahosts\u6587\u4ef6\u4f1a\u5728\u5f53\u524d\u76ee\u5f55\u4e2d\u8fdb\u884c\u641c\u7d22\uff0c\u6240\u4ee5\u8fd9\u6b21\u6211\u4eec\u5c06hosts\u6587\u4ef6\u653e\u5728ansible-repo\u76ee\u5f55\u4e0b\u4f5c\u4e3a\u6267\u884c\u73af\u5883\u3002<br \/>\n\u53e6\u5916\uff0c\u7531\u4e8e\u73b0\u5728\u53ea\u6709\u4e00\u4e2a\u81ea\u5df1\u7684\u670d\u52a1\u5668\uff0c\u6240\u4ee5\u9700\u8981\u6dfb\u52a0\u81ea\u5df1\u670d\u52a1\u5668\u7684IP\uff08\u672c\u4f8b\u4e2d\u4e3a172.19.176.97\uff09\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/37-0.png\" alt=\"image.png\" \/><\/div>\n<h2>\u5c1d\u8bd5\u51fb\u7403<\/h2>\n<p>\u5728\u8bb8\u591a\u4e66\u7c4d\u4e2d\uff0c\u4ed6\u4eec\u63d0\u5230\u8981\u521b\u5efaplaybook.yml\u5e76\u8fdb\u884c\u8fd9\u6837\u90a3\u6837\u7684\u64cd\u4f5c\uff0c\u4f46\u5b9e\u9645\u4e0a\u5e76\u4e0d\u9700\u8981\u521b\u5efaplaybook.yml\u4e5f\u53ef\u4ee5\u6267\u884c\u3002<br \/>\n\u6240\u4ee5\uff0c\u6211\u6765\u5c1d\u8bd5\u4e00\u4e0b\u8fd9\u4e2a\u3002<\/p>\n<pre class=\"post-pre\"><code>ansible -i hosts &lt;ip_address&gt; -m ping\r\nansible -i hosts 172.19.176.97 -m ping\r\n<\/code><\/pre>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/41-0.png\" alt=\"image.png\" \/><\/div>\n<h2>\u5931\u53bb\u65b9\u5411\uff1a\/etc\/ansible\/ansible.cfg \u7684\u9ed8\u8ba4\u8bbe\u7f6e\u662f\u600e\u6837\u7684\uff1f<\/h2>\n<p>\u65e2\u7136\u6709\u673a\u4f1a\uff0c\u5c31\u5c06\u9ed8\u8ba4\u7684\/etc\/ansible\/ansible.cfg\u5b8c\u6574\u4fdd\u7559\u3002<\/p>\n<pre class=\"post-pre\"><code>[root@ip-172-19-176-97 ansible-repo]# cat \/etc\/ansible\/ansible.cfg\r\n# config file for ansible -- https:\/\/ansible.com\/\r\n# ===============================================\r\n\r\n# nearly all parameters can be overridden in ansible-playbook\r\n# or with command line flags. ansible will read ANSIBLE_CONFIG,\r\n# ansible.cfg in the current working directory, .ansible.cfg in\r\n# the home directory or \/etc\/ansible\/ansible.cfg, whichever it\r\n# finds first\r\n\r\n[defaults]\r\n\r\n# some basic default values...\r\n\r\n#inventory      = \/etc\/ansible\/hosts\r\n#library        = \/usr\/share\/my_modules\/\r\n#module_utils   = \/usr\/share\/my_module_utils\/\r\n#remote_tmp     = ~\/.ansible\/tmp\r\n#local_tmp      = ~\/.ansible\/tmp\r\n#plugin_filters_cfg = \/etc\/ansible\/plugin_filters.yml\r\n#forks          = 5\r\n#poll_interval  = 15\r\n#sudo_user      = root\r\n#ask_sudo_pass = True\r\n#ask_pass      = True\r\n#transport      = smart\r\n#remote_port    = 22\r\n#module_lang    = C\r\n#module_set_locale = False\r\n\r\n# plays will gather facts by default, which contain information about\r\n# the remote system.\r\n#\r\n# smart - gather by default, but don't regather if already gathered\r\n# implicit - gather by default, turn off with gather_facts: False\r\n# explicit - do not gather by default, must say gather_facts: True\r\n#gathering = implicit\r\n\r\n# This only affects the gathering done by a play's gather_facts directive,\r\n# by default gathering retrieves all facts subsets\r\n# all - gather all subsets\r\n# network - gather min and network facts\r\n# hardware - gather hardware facts (longest facts to retrieve)\r\n# virtual - gather min and virtual facts\r\n# facter - import facts from facter\r\n# ohai - import facts from ohai\r\n# You can combine them using comma (ex: network,virtual)\r\n# You can negate them using ! (ex: !hardware,!facter,!ohai)\r\n# A minimal set of facts is always gathered.\r\n#gather_subset = all\r\n\r\n# some hardware related facts are collected\r\n# with a maximum timeout of 10 seconds. This\r\n# option lets you increase or decrease that\r\n# timeout to something more suitable for the\r\n# environment.\r\n# gather_timeout = 10\r\n\r\n# Ansible facts are available inside the ansible_facts.* dictionary\r\n# namespace. This setting maintains the behaviour which was the default prior\r\n# to 2.5, duplicating these variables into the main namespace, each with a\r\n# prefix of 'ansible_'.\r\n# This variable is set to True by default for backwards compatibility. It\r\n# will be changed to a default of 'False' in a future release.\r\n# ansible_facts.\r\n# inject_facts_as_vars = True\r\n\r\n# additional paths to search for roles in, colon separated\r\n#roles_path    = \/etc\/ansible\/roles\r\n\r\n# uncomment this to disable SSH key host checking\r\n#host_key_checking = False\r\n\r\n# change the default callback, you can only have one 'stdout' type  enabled at a time.\r\n#stdout_callback = skippy\r\n\r\n\r\n## Ansible ships with some plugins that require whitelisting,\r\n## this is done to avoid running all of a type by default.\r\n## These setting lists those that you want enabled for your system.\r\n## Custom plugins should not need this unless plugin author specifies it.\r\n\r\n# enable callback plugins, they can output to stdout but cannot be 'stdout' type.\r\n#callback_whitelist = timer, mail\r\n\r\n# Determine whether includes in tasks and handlers are \"static\" by\r\n# default. As of 2.0, includes are dynamic by default. Setting these\r\n# values to True will make includes behave more like they did in the\r\n# 1.x versions.\r\n#task_includes_static = False\r\n#handler_includes_static = False\r\n\r\n# Controls if a missing handler for a notification event is an error or a warning\r\n#error_on_missing_handler = True\r\n\r\n# change this for alternative sudo implementations\r\n#sudo_exe = sudo\r\n\r\n# What flags to pass to sudo\r\n# WARNING: leaving out the defaults might create unexpected behaviours\r\n#sudo_flags = -H -S -n\r\n\r\n# SSH timeout\r\n#timeout = 10\r\n\r\n# default user to use for playbooks if user is not specified\r\n# (\/usr\/bin\/ansible will use current user as default)\r\n#remote_user = root\r\n\r\n# logging is off by default unless this path is defined\r\n# if so defined, consider logrotate\r\n#log_path = \/var\/log\/ansible.log\r\n\r\n# default module name for \/usr\/bin\/ansible\r\n#module_name = command\r\n\r\n# use this shell for commands executed under sudo\r\n# you may need to change this to bin\/bash in rare instances\r\n# if sudo is constrained\r\n#executable = \/bin\/sh\r\n\r\n# if inventory variables overlap, does the higher precedence one win\r\n# or are hash values merged together?  The default is 'replace' but\r\n# this can also be set to 'merge'.\r\n#hash_behaviour = replace\r\n\r\n# by default, variables from roles will be visible in the global variable\r\n# scope. To prevent this, the following option can be enabled, and only\r\n# tasks and handlers within the role will see the variables there\r\n#private_role_vars = yes\r\n\r\n# list any Jinja2 extensions to enable here:\r\n#jinja2_extensions = jinja2.ext.do,jinja2.ext.i18n\r\n\r\n# if set, always use this private key file for authentication, same as\r\n# if passing --private-key to ansible or ansible-playbook\r\n#private_key_file = \/path\/to\/file\r\n\r\n# If set, configures the path to the Vault password file as an alternative to\r\n# specifying --vault-password-file on the command line.\r\n#vault_password_file = \/path\/to\/vault_password_file\r\n\r\n# format of string {{ ansible_managed }} available within Jinja2\r\n# templates indicates to users editing templates files will be replaced.\r\n# replacing {file}, {host} and {uid} and strftime codes with proper values.\r\n#ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}\r\n# {file}, {host}, {uid}, and the timestamp can all interfere with idempotence\r\n# in some situations so the default is a static string:\r\n#ansible_managed = Ansible managed\r\n\r\n# by default, ansible-playbook will display \"Skipping [host]\" if it determines a task\r\n# should not be run on a host.  Set this to \"False\" if you don't want to see these \"Skipping\"\r\n# messages. NOTE: the task header will still be shown regardless of whether or not the\r\n# task is skipped.\r\n#display_skipped_hosts = True\r\n\r\n# by default, if a task in a playbook does not include a name: field then\r\n# ansible-playbook will construct a header that includes the task's action but\r\n# not the task's args.  This is a security feature because ansible cannot know\r\n# if the *module* considers an argument to be no_log at the time that the\r\n# header is printed.  If your environment doesn't have a problem securing\r\n# stdout from ansible-playbook (or you have manually specified no_log in your\r\n# playbook on all of the tasks where you have secret information) then you can\r\n# safely set this to True to get more informative messages.\r\n#display_args_to_stdout = False\r\n\r\n# by default (as of 1.3), Ansible will raise errors when attempting to dereference\r\n# Jinja2 variables that are not set in templates or action lines. Uncomment this line\r\n# to revert the behavior to pre-1.3.\r\n#error_on_undefined_vars = False\r\n\r\n# by default (as of 1.6), Ansible may display warnings based on the configuration of the\r\n# system running ansible itself. This may include warnings about 3rd party packages or\r\n# other conditions that should be resolved if possible.\r\n# to disable these warnings, set the following value to False:\r\n#system_warnings = True\r\n\r\n# by default (as of 1.4), Ansible may display deprecation warnings for language\r\n# features that should no longer be used and will be removed in future versions.\r\n# to disable these warnings, set the following value to False:\r\n#deprecation_warnings = True\r\n\r\n# (as of 1.8), Ansible can optionally warn when usage of the shell and\r\n# command module appear to be simplified by using a default Ansible module\r\n# instead.  These warnings can be silenced by adjusting the following\r\n# setting or adding warn=yes or warn=no to the end of the command line\r\n# parameter string.  This will for example suggest using the git module\r\n# instead of shelling out to the git command.\r\n# command_warnings = False\r\n\r\n\r\n# set plugin path directories here, separate with colons\r\n#action_plugins     = \/usr\/share\/ansible\/plugins\/action\r\n#become_plugins     = \/usr\/share\/ansible\/plugins\/become\r\n#cache_plugins      = \/usr\/share\/ansible\/plugins\/cache\r\n#callback_plugins   = \/usr\/share\/ansible\/plugins\/callback\r\n#connection_plugins = \/usr\/share\/ansible\/plugins\/connection\r\n#lookup_plugins     = \/usr\/share\/ansible\/plugins\/lookup\r\n#inventory_plugins  = \/usr\/share\/ansible\/plugins\/inventory\r\n#vars_plugins       = \/usr\/share\/ansible\/plugins\/vars\r\n#filter_plugins     = \/usr\/share\/ansible\/plugins\/filter\r\n#test_plugins       = \/usr\/share\/ansible\/plugins\/test\r\n#terminal_plugins   = \/usr\/share\/ansible\/plugins\/terminal\r\n#strategy_plugins   = \/usr\/share\/ansible\/plugins\/strategy\r\n\r\n\r\n# by default, ansible will use the 'linear' strategy but you may want to try\r\n# another one\r\n#strategy = free\r\n\r\n# by default callbacks are not loaded for \/bin\/ansible, enable this if you\r\n# want, for example, a notification or logging callback to also apply to\r\n# \/bin\/ansible runs\r\n#bin_ansible_callbacks = False\r\n\r\n\r\n# don't like cows?  that's unfortunate.\r\n# set to 1 if you don't want cowsay support or export ANSIBLE_NOCOWS=1\r\n#nocows = 1\r\n\r\n# set which cowsay stencil you'd like to use by default. When set to 'random',\r\n# a random stencil will be selected for each task. The selection will be filtered\r\n# against the `cow_whitelist` option below.\r\n#cow_selection = default\r\n#cow_selection = random\r\n\r\n# when using the 'random' option for cowsay, stencils will be restricted to this list.\r\n# it should be formatted as a comma-separated list with no spaces between names.\r\n# NOTE: line continuations here are for formatting purposes only, as the INI parser\r\n#       in python does not support them.\r\n#cow_whitelist=bud-frogs,bunny,cheese,daemon,default,dragon,elephant-in-snake,elephant,eyes,\\\r\n#              hellokitty,kitty,luke-koala,meow,milk,moofasa,moose,ren,sheep,small,stegosaurus,\\\r\n#              stimpy,supermilker,three-eyes,turkey,turtle,tux,udder,vader-koala,vader,www\r\n\r\n# don't like colors either?\r\n# set to 1 if you don't want colors, or export ANSIBLE_NOCOLOR=1\r\n#nocolor = 1\r\n\r\n# if set to a persistent type (not 'memory', for example 'redis') fact values\r\n# from previous runs in Ansible will be stored.  This may be useful when\r\n# wanting to use, for example, IP information from one group of servers\r\n# without having to talk to them in the same playbook run to get their\r\n# current IP information.\r\n#fact_caching = memory\r\n\r\n#This option tells Ansible where to cache facts. The value is plugin dependent.\r\n#For the jsonfile plugin, it should be a path to a local directory.\r\n#For the redis plugin, the value is a host:port:database triplet: fact_caching_connection = localhost:6379:0\r\n\r\n#fact_caching_connection=\/tmp\r\n\r\n\r\n\r\n# retry files\r\n# When a playbook fails a .retry file can be created that will be placed in ~\/\r\n# You can enable this feature by setting retry_files_enabled to True\r\n# and you can change the location of the files by setting retry_files_save_path\r\n\r\n#retry_files_enabled = False\r\n#retry_files_save_path = ~\/.ansible-retry\r\n\r\n# squash actions\r\n# Ansible can optimise actions that call modules with list parameters\r\n# when looping. Instead of calling the module once per with_ item, the\r\n# module is called once with all items at once. Currently this only works\r\n# under limited circumstances, and only with parameters named 'name'.\r\n#squash_actions = apk,apt,dnf,homebrew,pacman,pkgng,yum,zypper\r\n\r\n# prevents logging of task data, off by default\r\n#no_log = False\r\n\r\n# prevents logging of tasks, but only on the targets, data is still logged on the master\/controller\r\n#no_target_syslog = False\r\n\r\n# controls whether Ansible will raise an error or warning if a task has no\r\n# choice but to create world readable temporary files to execute a module on\r\n# the remote machine.  This option is False by default for security.  Users may\r\n# turn this on to have behaviour more like Ansible prior to 2.1.x.  See\r\n# https:\/\/docs.ansible.com\/ansible\/become.html#becoming-an-unprivileged-user\r\n# for more secure ways to fix this than enabling this option.\r\n#allow_world_readable_tmpfiles = False\r\n\r\n# controls the compression level of variables sent to\r\n# worker processes. At the default of 0, no compression\r\n# is used. This value must be an integer from 0 to 9.\r\n#var_compression_level = 9\r\n\r\n# controls what compression method is used for new-style ansible modules when\r\n# they are sent to the remote system.  The compression types depend on having\r\n# support compiled into both the controller's python and the client's python.\r\n# The names should match with the python Zipfile compression types:\r\n# * ZIP_STORED (no compression. available everywhere)\r\n# * ZIP_DEFLATED (uses zlib, the default)\r\n# These values may be set per host via the ansible_module_compression inventory\r\n# variable\r\n#module_compression = 'ZIP_DEFLATED'\r\n\r\n# This controls the cutoff point (in bytes) on --diff for files\r\n# set to 0 for unlimited (RAM may suffer!).\r\n#max_diff_size = 1048576\r\n\r\n# This controls how ansible handles multiple --tags and --skip-tags arguments\r\n# on the CLI.  If this is True then multiple arguments are merged together.  If\r\n# it is False, then the last specified argument is used and the others are ignored.\r\n# This option will be removed in 2.8.\r\n#merge_multiple_cli_flags = True\r\n\r\n# Controls showing custom stats at the end, off by default\r\n#show_custom_stats = True\r\n\r\n# Controls which files to ignore when using a directory as inventory with\r\n# possibly multiple sources (both static and dynamic)\r\n#inventory_ignore_extensions = ~, .orig, .bak, .ini, .cfg, .retry, .pyc, .pyo\r\n\r\n# This family of modules use an alternative execution path optimized for network appliances\r\n# only update this setting if you know how this works, otherwise it can break module execution\r\n#network_group_modules=eos, nxos, ios, iosxr, junos, vyos\r\n\r\n# When enabled, this option allows lookups (via variables like {{lookup('foo')}} or when used as\r\n# a loop with `with_foo`) to return data that is not marked \"unsafe\". This means the data may contain\r\n# jinja2 templating language which will be run through the templating engine.\r\n# ENABLING THIS COULD BE A SECURITY RISK\r\n#allow_unsafe_lookups = False\r\n\r\n# set default errors for all plays\r\n#any_errors_fatal = False\r\n\r\n[inventory]\r\n# enable inventory plugins, default: 'host_list', 'script', 'auto', 'yaml', 'ini', 'toml'\r\n#enable_plugins = host_list, virtualbox, yaml, constructed\r\n\r\n# ignore these extensions when parsing a directory as inventory source\r\n#ignore_extensions = .pyc, .pyo, .swp, .bak, ~, .rpm, .md, .txt, ~, .orig, .ini, .cfg, .retry\r\n\r\n# ignore files matching these patterns when parsing a directory as inventory source\r\n#ignore_patterns=\r\n\r\n# If 'true' unparsed inventory sources become fatal errors, they are warnings otherwise.\r\n#unparsed_is_failed=False\r\n\r\n[privilege_escalation]\r\n#become=True\r\n#become_method=sudo\r\n#become_user=root\r\n#become_ask_pass=False\r\n\r\n[paramiko_connection]\r\n\r\n# uncomment this line to cause the paramiko connection plugin to not record new host\r\n# keys encountered.  Increases performance on new host additions.  Setting works independently of the\r\n# host key checking setting above.\r\n#record_host_keys=False\r\n\r\n# by default, Ansible requests a pseudo-terminal for commands executed under sudo. Uncomment this\r\n# line to disable this behaviour.\r\n#pty=False\r\n\r\n# paramiko will default to looking for SSH keys initially when trying to\r\n# authenticate to remote devices.  This is a problem for some network devices\r\n# that close the connection after a key failure.  Uncomment this line to\r\n# disable the Paramiko look for keys function\r\n#look_for_keys = False\r\n\r\n# When using persistent connections with Paramiko, the connection runs in a\r\n# background process.  If the host doesn't already have a valid SSH key, by\r\n# default Ansible will prompt to add the host key.  This will cause connections\r\n# running in background processes to fail.  Uncomment this line to have\r\n# Paramiko automatically add host keys.\r\n#host_key_auto_add = True\r\n\r\n[ssh_connection]\r\n\r\n# ssh arguments to use\r\n# Leaving off ControlPersist will result in poor performance, so use\r\n# paramiko on older platforms rather than removing it, -C controls compression use\r\n#ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s\r\n\r\n# The base directory for the ControlPath sockets.\r\n# This is the \"%(directory)s\" in the control_path option\r\n#\r\n# Example:\r\n# control_path_dir = \/tmp\/.ansible\/cp\r\n#control_path_dir = ~\/.ansible\/cp\r\n\r\n# The path to use for the ControlPath sockets. This defaults to a hashed string of the hostname,\r\n# port and username (empty string in the config). The hash mitigates a common problem users\r\n# found with long hostnames and the conventional %(directory)s\/ansible-ssh-%%h-%%p-%%r format.\r\n# In those cases, a \"too long for Unix domain socket\" ssh error would occur.\r\n#\r\n# Example:\r\n# control_path = %(directory)s\/%%h-%%r\r\n#control_path =\r\n\r\n# Enabling pipelining reduces the number of SSH operations required to\r\n# execute a module on the remote server. This can result in a significant\r\n# performance improvement when enabled, however when using \"sudo:\" you must\r\n# first disable 'requiretty' in \/etc\/sudoers\r\n#\r\n# By default, this option is disabled to preserve compatibility with\r\n# sudoers configurations that have requiretty (the default on many distros).\r\n#\r\n#pipelining = False\r\n\r\n# Control the mechanism for transferring files (old)\r\n#   * smart = try sftp and then try scp [default]\r\n#   * True = use scp only\r\n#   * False = use sftp only\r\n#scp_if_ssh = smart\r\n\r\n# Control the mechanism for transferring files (new)\r\n# If set, this will override the scp_if_ssh option\r\n#   * sftp  = use sftp to transfer files\r\n#   * scp   = use scp to transfer files\r\n#   * piped = use 'dd' over SSH to transfer files\r\n#   * smart = try sftp, scp, and piped, in that order [default]\r\n#transfer_method = smart\r\n\r\n# if False, sftp will not use batch mode to transfer files. This may cause some\r\n# types of file transfer failures impossible to catch however, and should\r\n# only be disabled if your sftp version has problems with batch mode\r\n#sftp_batch_mode = False\r\n\r\n# The -tt argument is passed to ssh when pipelining is not enabled because sudo\r\n# requires a tty by default.\r\n#usetty = True\r\n\r\n# Number of times to retry an SSH connection to a host, in case of UNREACHABLE.\r\n# For each retry attempt, there is an exponential backoff,\r\n# so after the first attempt there is 1s wait, then 2s, 4s etc. up to 30s (max).\r\n#retries = 3\r\n\r\n[persistent_connection]\r\n\r\n# Configures the persistent connection timeout value in seconds.  This value is\r\n# how long the persistent connection will remain idle before it is destroyed.\r\n# If the connection doesn't receive a request before the timeout value\r\n# expires, the connection is shutdown. The default value is 30 seconds.\r\n#connect_timeout = 30\r\n\r\n# The command timeout value defines the amount of time to wait for a command\r\n# or RPC call before timing out. The value for the command timeout must\r\n# be less than the value of the persistent connection idle timeout (connect_timeout)\r\n# The default value is 30 second.\r\n#command_timeout = 30\r\n\r\n[accelerate]\r\n#accelerate_port = 5099\r\n#accelerate_timeout = 30\r\n#accelerate_connect_timeout = 5.0\r\n\r\n# The daemon timeout is measured in minutes. This time is measured\r\n# from the last activity to the accelerate daemon.\r\n#accelerate_daemon_timeout = 30\r\n\r\n# If set to yes, accelerate_multi_key will allow multiple\r\n# private keys to be uploaded to it, though each user must\r\n# have access to the system via SSH to add a new key. The default\r\n# is \"no\".\r\n#accelerate_multi_key = yes\r\n\r\n[selinux]\r\n# file systems that require special treatment when dealing with security context\r\n# the default behaviour that copies the existing context or uses the user default\r\n# needs to be changed to use the file system dependent context.\r\n#special_context_filesystems=nfs,vboxsf,fuse,ramfs,9p,vfat\r\n\r\n# Set this to yes to allow libvirt_lxc connections to work without SELinux.\r\n#libvirt_lxc_noseclabel = yes\r\n\r\n[colors]\r\n#highlight = white\r\n#verbose = blue\r\n#warn = bright purple\r\n#error = red\r\n#debug = dark gray\r\n#deprecate = purple\r\n#skip = cyan\r\n#unreachable = red\r\n#ok = green\r\n#changed = yellow\r\n#diff_add = green\r\n#diff_remove = red\r\n#diff_lines = cyan\r\n\r\n\r\n[diff]\r\n# Always print diff when running ( same as always running with -D\/--diff )\r\n# always = no\r\n\r\n# Set how many context lines to show in diff\r\n# context = 3\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u7531\u4e8eAnsible\u7684\u5b89\u88c5\u5728\u793e\u4ea4\u5708\u4e2d\u975e\u5e38\u666e\u904d\uff0c\u8fd9\u91cc\u53ea\u662f\u4e3a\u4e86\u81ea\u5df1\u505a\u4e2a\u5907\u5fd8\u5f55\uff0c\u56e0\u4e3a\u6211\u4ece\u672a\u771f\u6b63\u5c1d\u8bd5\u8fc7\u5b83\u3002 \u5b89\u88c5\u65b9 [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-42680","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728centos-7\uff08aws\uff09\u4e0a\u5b89\u88c5ansible\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u7531\u4e8eAnsible\u7684\u5b89\u88c5\u5728\u793e\u4ea4\u5708\u4e2d\u975e\u5e38\u666e\u904d\uff0c\u8fd9\u91cc\u53ea\u662f\u4e3a\u4e86\u81ea\u5df1\u505a\u4e2a\u5907\u5fd8\u5f55\uff0c\u56e0\u4e3a\u6211\u4ece\u672a\u771f\u6b63\u5c1d\u8bd5\u8fc7\u5b83\u3002 \u5b89\u88c5\u65b9 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728centos-7\uff08aws\uff09\u4e0a\u5b89\u88c5ansible\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-01T01:36:20+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-04T03:40:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/10-0.png\" \/>\n<meta name=\"author\" content=\"\u5b87, \u534e\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u5b87, \u534e\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/\",\"name\":\"\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-12-01T01:36:20+00:00\",\"dateModified\":\"2024-05-04T03:40:10+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458\",\"name\":\"\u5b87, \u534e\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g\",\"caption\":\"\u5b87, \u534e\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728centos-7\uff08aws\uff09\u4e0a\u5b89\u88c5ansible\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible","og_description":"\u9996\u5148 \u7531\u4e8eAnsible\u7684\u5b89\u88c5\u5728\u793e\u4ea4\u5708\u4e2d\u975e\u5e38\u666e\u904d\uff0c\u8fd9\u91cc\u53ea\u662f\u4e3a\u4e86\u81ea\u5df1\u505a\u4e2a\u5907\u5fd8\u5f55\uff0c\u56e0\u4e3a\u6211\u4ece\u672a\u771f\u6b63\u5c1d\u8bd5\u8fc7\u5b83\u3002 \u5b89\u88c5\u65b9 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728centos-7\uff08aws\uff09\u4e0a\u5b89\u88c5ansible\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-12-01T01:36:20+00:00","article_modified_time":"2024-05-04T03:40:10+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d4e5737434c4406cc07bd\/10-0.png"}],"author":"\u5b87, \u534e","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u5b87, \u534e","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"16 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/","name":"\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-12-01T01:36:20+00:00","dateModified":"2024-05-04T03:40:10+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u5728CentOS 7\uff08AWS\uff09\u4e0a\u5b89\u88c5Ansible"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/513018e4e121d3add1b7c5de8be21458","name":"\u5b87, \u534e","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/63cd45cbc05a35fc4ff7637a163c83c4962ef58d27472726c3a3e0c9c5194f0f?s=96&d=mm&r=g","caption":"\u5b87, \u534e"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/yuhua\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8centos-7%ef%bc%88aws%ef%bc%89%e4%b8%8a%e5%ae%89%e8%a3%85ansible%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42680","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=42680"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42680\/revisions"}],"predecessor-version":[{"id":98103,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42680\/revisions\/98103"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=42680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=42680"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=42680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}