{"id":42295,"date":"2023-05-23T15:19:15","date_gmt":"2023-02-08T11:12:37","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/"},"modified":"2024-04-30T05:35:15","modified_gmt":"2024-04-29T21:35:15","slug":"andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/","title":{"rendered":"Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed"},"content":{"rendered":"<p>\u6709\u5173\u5728Ansible\u4e2d\u6307\u5b9a\u5bc6\u7801\u7684\u603b\u7ed3(\u4f7f\u7528\u65b9\u6cd5)\u3002<\/p>\n<h1>\u7b80\u8981\u6982\u8ff0<\/h1>\n<h2>SSH\u8fde\u63a5\u5bc6\u7801<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ssh \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u81ea\u52d5\u5165\u529b\u3059\u308b\u305f\u3081\u306b\u306f\u3001sshpass \u304c\u5fc5\u8981\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">sshpass \u306f ansible \u306e\u30e2\u30b8\u30e5\u30fc\u30eb\u3067\u306f\u306a\u3044\u305f\u3081\u3001\u5225\u9014\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5fc5\u8981\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">sshpass \u306f\u3001&#8221;assword&#8221; \u3068\u3044\u3046\u6587\u5b57\u5217 (\u30d7\u30ed\u30f3\u30d7\u30c8) \u304c\u8868\u793a\u3055\u308c\u308b\u306e\u3092\u5f85\u3063\u3066\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ansible \u304b\u3089\u547c\u3073\u51fa\u3059 sshpass \u3078\u5f15\u6570\u3092\u6e21\u3059\u65b9\u6cd5\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u79d8\u5bc6\u9375\u306e\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u5165\u529b\u306b\u306f(\u305d\u306e\u307e\u307e\u3067\u306f)\u4f7f\u7528\u4e0d\u53ef\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u79d8\u5bc6\u9375\u306e\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u306f\u5916\u3055\u305a\u306b ssh-agent\/ssh-add \u3092\u4f7f\u7528\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u3084\u3080\u3092\u5f97\u305a\u30d1\u30b9\u30ef\u30fc\u30c9\/\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u3092\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u7b49\u306b\u8a18\u8f09\u3059\u308b\u5834\u5408\u306b\u306f\u3001ansible-vault \u3067\u6697\u53f7\u5316\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u30ed\u30b0\u30a4\u30f3\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u4e00\u822c\u7684\u306b sudo \u6a29\u9650\u6607\u683c\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3068\u540c\u3058\u305f\u3081\u3001\u516c\u958b\u9375\u6697\u53f7\u7b49\u306b\u901f\u3084\u304b\u306b\u79fb\u884c\u3002<\/ul>\n<h2>\u53d8\u6210 (sudo) \u5bc6\u7801<\/h2>\n<ul class=\"post-ul\">\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a18\u8f09\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306b\u306f\u3001ansible-vault \u3067\u6697\u53f7\u5316\u3002<\/ul>\n<h2>\u516c\u958b\u5bc6\u94a5\u5bc6\u7801\u4e2d\u79c1\u94a5\u6587\u4ef6\u540d\u7684\u6280\u5de7<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">sshpass \u30d7\u30ed\u30b0\u30e9\u30e0\u306f\u30c7\u30d5\u30a9\u30eb\u30c8\u3067 &#8220;assword&#8221; \u3092\u542b\u3080\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u671f\u5f85\u3057\u3066\u3044\u308b\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ssh \u306e\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u5165\u529b\u30d7\u30ed\u30f3\u30d7\u30c8\u306f &#8220;Enter passphrase for key &#8216;&#8230;id_rsa&#8217;:&#8221; \u3068\u306a\u3063\u3066\u304a\u308a\u3001&#8221;assword&#8221; \u3092\u542b\u307e\u306a\u3044\u3002(\u305d\u306e\u305f\u3081\u3001sshpass \u304c\u30d7\u30ed\u30f3\u30c8\u3092\u5f85\u3061\u7d9a\u3051\u3066\u3001\u305d\u306e\u307e\u307e\u3067\u306f\u81ea\u52d5\u5316\u3067\u304d\u306a\u3044)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u79d8\u5bc6\u9375\u306e\u30d5\u30a1\u30a4\u30eb\u540d\u306b &#8220;assword&#8221; \u3092\u542b\u3081\u308b\u3068\u3001\u30d7\u30ed\u30f3\u30d7\u30c8\u306b &#8220;assword&#8221; \u3092\u542b\u3080\u3053\u3068\u306b\u306a\u308a\u3001sshpass \u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u307e\u307e\u5229\u7528\u53ef\u80fd\u3002<\/ul>\n<p>\u56e0\u6b64\uff0c\u5982\u679c\u5c06\u5bc6\u94a5\u6587\u4ef6\u547d\u540d\u4e3a&#8221;assword&#8221;\uff0c\u90a3\u4e48\u5373\u4f7f\u5728ansible\u4e2d\u4e5f\u53ef\u4ee5\u81ea\u52a8\u8f93\u5165\u5bc6\u7801\u3002<\/p>\n<h2>ansible-vault\uff1avault-id \u7684\u63d0\u793a<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u6697\u53f7\u5316\u3055\u308c\u305f\u6587\u5b57\u5217\u306e\u30d8\u30c3\u30c0\u306b label \u304c\u3064\u3044\u3066\u3044\u3066\u3082\u3001vault-id-list \u306b\u8a2d\u5b9a\u3055\u308c\u305f ID \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u3092\u982d\u304b\u3089\u9806\u306b\u8a66\u3057\u3066\u3044\u308b\u6a21\u69d8\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u3064\u307e\u308a\u3001\u73fe\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u306f\u3001label \u306f\u4eba\u9593\u304c\u8b58\u5225\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3001ansible-vault \u30d7\u30ed\u30b0\u30e9\u30e0\u306b\u3068\u3063\u3066\u306f\u3001\u307b\u3068\u3093\u3069\u610f\u5473\u3092\u306a\u3057\u3066\u3044\u306a\u3044\u3002(\u3068\u601d\u308f\u308c\u308b)<\/ul>\n<hr \/>\n<h1>\u524d\u63d0\u6761\u4ef6<\/h1>\n<h2>\u64cd\u4f5c\u7cfb\u7edf\u73af\u5883<\/h2>\n<p>\u63a7\u5236\u4e3b\u673a\u64cd\u4f5c\u7cfb\u7edf\uff1aUbuntu 18.04<br \/>\n\u76ee\u6807\u4e3b\u673a\u64cd\u4f5c\u7cfb\u7edf\uff1aUbuntu 18.04 \uff08docker\uff09\u00d7 2<\/p>\n<pre class=\"post-pre\"><code>NAME=\"Ubuntu\"\r\nVERSION=\"18.04.3 LTS (Bionic Beaver)\"\r\nID=ubuntu\r\nID_LIKE=debian\r\nPRETTY_NAME=\"Ubuntu 18.04.3 LTS\"\r\nVERSION_ID=\"18.04\"\r\nHOME_URL=\"https:\/\/www.ubuntu.com\/\"\r\nSUPPORT_URL=\"https:\/\/help.ubuntu.com\/\"\r\nBUG_REPORT_URL=\"https:\/\/bugs.launchpad.net\/ubuntu\/\"\r\nPRIVACY_POLICY_URL=\"https:\/\/www.ubuntu.com\/legal\/terms-and-policies\/privacy-policy\"\r\nVERSION_CODENAME=bionic\r\nUBUNTU_CODENAME=bionic\r\n<\/code><\/pre>\n<h2>Python\u73af\u5883<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> pip freeze\r\n<span class=\"go\">ansible==2.9.2\r\ncffi==1.13.2\r\ncryptography==2.8\r\nJinja2==2.10.3\r\nMarkupSafe==1.1.1\r\npasslib==1.7.2\r\npkg-resources==0.0.0\r\npycparser==2.19\r\nPyYAML==5.2\r\nsix==1.13.0\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<h2>\u8fde\u63a5\u9009\u9879\u548c\u8fde\u63a5\u73af\u5883\u7684\u5bc6\u7801\u7b49\u76f8\u5173\u4fe1\u606f\u3002<\/h2>\n<div>\n<div class=\"post-table\">\u63a5\u7d9a\u5148 IP addressssh \u63a5\u7d9a\u79d8\u5bc6\u9375\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u30e6\u30fc\u30b6\u540d&amp;sudo \u5229\u7528172.17.0.2\u516c\u958b\u9375\u65b9\u5f0f&#8221;<code>privkey_passphrase<\/code>&#8220;pubkeyuser<\/p>\n<p>\u30d1\u30b9\u30ef\u30fc\u30c9: &#8220;<code>pubkeyuser_password<\/code>&#8220;172.17.0.3\u30d1\u30b9\u30ef\u30fc\u30c9\u5165\u529b-pwduser<\/p>\n<p>\u30d1\u30b9\u30ef\u30fc\u30c9: &#8220;<code>pwduser_password<\/code>&#8220;<\/div>\n<\/div>\n<h2>Ansible \u73af\u5883 &#8211; Ansible Environment<\/h2>\n<h3>\u5b89\u88c5 Ansible \u7684\u7248\u672c<\/h3>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ansible <span class=\"nt\">--version<\/span>\r\n<span class=\"go\">ansible 2.9.2\r\n  config file = \/home\/luser\/work\/ansible.cfg\r\n  configured module search path = ['\/home\/luser\/.ansible\/plugins\/modules', '\/usr\/share\/ansible\/plugins\/modules']\r\n  ansible python module location = \/home\/luser\/work\/Python.d\/envs\/ansible\/lib\/python3.6\/site-packages\/ansible\r\n  executable location = \/home\/luser\/work\/Python.d\/envs\/ansible\/bin\/ansible\r\n  python version = 3.6.9 (default, Nov  7 2019, 10:44:02) [GCC 8.3.0]\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<h3>Ansible \u4e3b\u673a\u6587\u4ef6<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nn\">[hostgroup]<\/span>\r\n<span class=\"err\">172.17.0.2<\/span>\r\n<span class=\"err\">172.17.0.3<\/span>\r\n<\/code><\/pre>\n<h2>\u6291\u5236Ansible\u7684DEPRECATION WARNING\u3002<\/h2>\n<p>\u4e3a\u4e86\u6291\u5236DEPRECATION WARNING\uff0c\u6211\u4eec\u8981\u5728\u8fde\u63a5\u7684\u4e3b\u673a\u4e0a\u660e\u786e\u6307\u5b9a\u4f7f\u7528python3\u800c\u4e0d\u662fpython2\uff0c\u5219\u5728\u5f53\u524d\u76ee\u5f55\u4e0b\u653e\u7f6e\u5982\u4e0b\u7684ansible.cfg\u6587\u4ef6\u3002\uff08\u867d\u7136\u4e5f\u53ef\u4ee5\u8bbe\u7f6edeprecation_warnings=False\uff0c\u4f46\u4e0d\u8981\u8ba9\u5176\u4ed6\u8b66\u544a\u4e5f\u6d88\u5931\uff09<\/p>\n<h3>ansible.cfg \u6587\u4ef6<\/h3>\n<pre class=\"post-pre\"><code><span class=\"nn\">[defaults]<\/span>\r\n<span class=\"py\">interpreter_python<\/span>      <span class=\"p\">=<\/span> <span class=\"s\">\/usr\/bin\/python3<\/span>\r\n<\/code><\/pre>\n<h2>\u4fdd\u5bc6\u94a5\u5319<\/h2>\n<p>\u5c06\u7528\u4e8e\u52a8\u4f5c\u786e\u8ba4\u7684\u79d8\u5bc6\u94a5\u5319\u653e\u7f6e\u5728\u5f53\u524d\u76ee\u5f55\u4e2d\u3002<\/p>\n<h3>pubkeyuser_id_rsa \u6587\u4ef6<\/h3>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">ls<\/span> <span class=\"nt\">-l<\/span> pubkeyuser_id_rsa\r\n<span class=\"go\">-rw------- 1 luser luser 1766 Jan 11 02:19 pubkeyuser_id_rsa\r\n<\/span><\/code><\/pre>\n<h2>\u6587\u4ef6\u7ed3\u6784<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> tree <span class=\"nt\">-a<\/span> .\/\r\n<span class=\"go\">.\/\r\n|-- ansible.cfg\r\n|-- host_vars\r\n|   |-- 172.17.0.2.yml\r\n|   `-- 172.17.0.3.yml\r\n|-- hosts\r\n|-- pubkeyuser_id_rsa\r\n<\/span><span class=\"gp\">`-- pubkeyuser_id_rsa_assword -&gt;<\/span> pubkeyuser_id_rsa\r\n<span class=\"go\">\r\n1 directory, 6 files\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u524d\u63d0\u5230\u6b64\u4e3a\u6b62\u3002<\/p>\n<hr \/>\n<h1>\u4f7f\u7528Ansible\u65f6\u7684\u5bc6\u7801(\u53e3\u4ee4)\u7c7b\u578b<\/h1>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u901a\u8fc7ssh\u8fde\u63a5\u65f6\u7684\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u901a\u8fc7sudo\uff08\u53d8\u6210\uff09\u65f6\u7684\u5bc6\u7801<\/ol>\n<h2>SSH\u8fde\u63a5\u7684\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed\u8bbe\u7f6e<\/h2>\n<p>\u53c2\u8003\u6587\u732e\uff1assh &#8211; \u901a\u8fc7ssh\u5ba2\u6237\u7aef\u4e8c\u8fdb\u5236\u6587\u4ef6\u8fde\u63a5 &#8211; Ansible\u6587\u6863<\/p>\n<p>\u5728\u4e2d\u56fd\uff0cSSH\u8fde\u63a5\u4e3b\u8981\u6709\u4ee5\u4e0b\u4e24\u79cd\u65b9\u6cd5\u8fdb\u884c\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u4f7f\u7528\u516c\u5f00\u5bc6\u94a5\u52a0\u5bc6\u7684\u8fde\u63a5<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u4f7f\u7528PAM\u5bc6\u7801\u8fdb\u884c\u8fde\u63a5<\/ol>\n<h2>\u4f7f\u7528\u516c\u5f00\u5bc6\u94a5\u52a0\u5bc6\u7684\u8fde\u63a5\u3002<\/h2>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ssh <span class=\"nt\">-i<\/span> .\/pubkeyuser_id_rsa pubkeyuser@172.17.0.2\r\n<span class=\"go\">Enter passphrase for key '.\/pubkeyuser_id_rsa':  \u2190 \u3053\u3053\u3067\u79d8\u5bc6\u9375\u306e\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u3092\u5165\u529b\r\nLast login: Tue Jan  7 08:00:57 2020 from 172.17.0.1\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">id<\/span> <span class=\"nt\">-a<\/span>\r\n<span class=\"go\">uid=1001(pubkeyuser) gid=1001(pubkeyuser) groups=1001(pubkeyuser),27(sudo)\r\n<\/span><span class=\"gp\">$<\/span> <span class=\"nb\">exit<\/span>\r\n<span class=\"go\">Connection to 172.17.0.2 closed.\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>Ansible\u8fde\u63a5\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ansible <span class=\"nt\">-i<\/span> hosts <span class=\"nt\">-u<\/span> pubkeyuser <span class=\"nt\">--private-key<\/span> pubkeyuser_id_rsa 172.17.0.2 <span class=\"nt\">-m<\/span> ping\r\n<span class=\"go\">Enter passphrase for key 'pubkeyuser_id_rsa':  \u2190 \u3053\u3053\u3067\u79d8\u5bc6\u9375\u306e\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba\u3092\u5165\u529b\r\n<\/span><span class=\"gp\">172.17.0.2 | SUCCESS =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"changed\": false,\r\n    \"ping\": \"pong\"\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<h3>\u4f7f\u7528ssh-agent\/ssh-add<\/h3>\n<p>\u53ef\u4ee5\u4f7f\u7528ssh-agent\/ssh-add\u6765\u907f\u514d\u8f93\u5165\u5bc6\u7801\u3002<\/p>\n<blockquote><p>\u5f53\u4f7f\u7528\u9ed8\u8ba4\u7684\u8fde\u63a5\u63d2\u4ef6\u65f6\uff0cAnsible\u4e0d\u4f1a\u63d0\u4f9b\u4e00\u4e2a\u901a\u9053\u6765\u5141\u8bb8\u7528\u6237\u4e0essh\u8fc7\u7a0b\u8fdb\u884c\u901a\u4fe1\uff0c\u624b\u52a8\u8f93\u5165\u5bc6\u7801\u4ee5\u89e3\u5bc6ssh\u5bc6\u94a5\u3002\u5f3a\u70c8\u5efa\u8bae\u4f7f\u7528ssh-agent\u3002<\/p><\/blockquote>\n<p>Ansible\u7684\u6587\u4ef6\u4e2d\u4e5f\u5f3a\u70c8\u63a8\u8350\u4f7f\u7528ssh-agent\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">eval<\/span> <span class=\"sb\">`<\/span>ssh-agent<span class=\"sb\">`<\/span>\r\n<span class=\"go\">Agent pid 3256\r\n<\/span><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">echo<\/span> <span class=\"nv\">$SSH_AUTH_SOCK<\/span>\r\n<span class=\"go\">\/tmp\/ssh-dcXxsNEXR7zu\/agent.3254\r\n<\/span><span class=\"gp\">(ansible) $<\/span> ssh-add pubkeyuser_id_rsa\r\n<span class=\"go\">Enter passphrase for pubkeyuser_id_rsa:\r\nIdentity added: pubkeyuser_id_rsa (pubkeyuser_id_rsa)\r\n<\/span><span class=\"gp\">(ansible) $<\/span> ssh-add <span class=\"nt\">-l<\/span>\r\n<span class=\"go\">2048 SHA256:Skhwkjn4nNRdRzWxNZBRGSPamcZikVkeBVpPhtFzgXw pubkeyuser_id_rsa (RSA)\r\n<\/span><span class=\"gp\">(ansible) $<\/span> ansible <span class=\"nt\">-i<\/span> hosts <span class=\"nt\">-u<\/span> pubkeyuser <span class=\"nt\">--private-key<\/span> pubkeyuser_id_rsa 172.17.0.2 <span class=\"nt\">-m<\/span> ping\r\n<span class=\"gp\">172.17.0.2 | SUCCESS =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"changed\": false,\r\n    \"ping\": \"pong\"\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u4f7f\u7528csh\u7cfb\u5217\u547d\u4ee4\u65f6\uff0c\u9700\u8981\u5728\u547d\u4ee4\u4e2d\u6dfb\u52a0-c\u9009\u9879\uff0c\u5982eval `ssh-agent -c`\u3002<\/p>\n<h3>\u5728\u6279\u5904\u7406\u4e2d\u8bbe\u7f6e\u5bc6\u7801\u53e3\u4ee4\u3002<\/h3>\n<p>\u53ea\u6709\u5728\u50cf\u6279\u5904\u7406\u90a3\u6837\u81ea\u52a8\u542f\u52a8\uff0c\u65e0\u9700\u4eba\u5de5\u5e72\u9884\u7684\u60c5\u51b5\u4e0b\uff0c\u624d\u9700\u8981\u8fdb\u884c\u8bbe\u7f6e\uff0c\u800c\u4e0d\u662f\u4ea4\u4e92\u5f0f\u7684\u3002<\/p>\n<h4>\u4f7f\u7528 ssh-agent\/ssh-add<\/h4>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ssh-agent \u306f\u3001(\u901a\u5e38)\u30ed\u30b0\u30a2\u30a6\u30c8\u3057\u3066\u3082\u30d7\u30ed\u30bb\u30b9\u304c\u6b8b\u308a\u3001\u30bd\u30b1\u30c3\u30c8\u304c\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u3053\u308c\u3092\u5229\u7528\u3059\u308b\u3068\u3001\u975e\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u51e6\u7406\u3067\u3082\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5165\u529b\u3092\u7701\u7565\u3067\u304d\u307e\u3059\u3002<\/ul>\n<p>\u5f53\u60a8\u4ece~\/.bashrc\uff08\u6216\u76f4\u63a5\u5728.bashrc\u4e2d\u7f16\u5199\uff09\u8c03\u7528\u4ee5\u4e0b\u7684shell\u811a\u672c\u65f6\uff0c\u60a8\u53ef\u4ee5\u91cd\u590d\u4f7f\u7528\u73b0\u6709\u7684\u8fdb\u7a0b\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">#!\/bin\/sh<\/span>\r\n\r\n<span class=\"o\">[<\/span> <span class=\"si\">$(<\/span><span class=\"nb\">id<\/span> <span class=\"nt\">-u<\/span><span class=\"si\">)<\/span> <span class=\"nt\">-eq<\/span> 0 <span class=\"o\">]<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">exit <\/span>255\r\n\r\n<span class=\"nv\">LANG<\/span><span class=\"o\">=<\/span>C\r\n<span class=\"nv\">SSH_AGENT<\/span><span class=\"o\">=<\/span>ssh-agent\r\n<span class=\"nv\">SSH_AGENT_SAVED<\/span><span class=\"o\">=<\/span><span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT_SAVED<\/span><span class=\"k\">:-<\/span><span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">HOME<\/span><span class=\"k\">}<\/span><span class=\"s2\">\/.ssh\/.<\/span><span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT<\/span><span class=\"k\">}<\/span><span class=\"s2\">\"<\/span><span class=\"k\">}<\/span>\r\n\r\n<span class=\"nv\">AGENT_ENV<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"\"<\/span>\r\n\r\n<span class=\"k\">if<\/span> <span class=\"o\">[<\/span> <span class=\"nt\">-f<\/span> <span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT_SAVED<\/span><span class=\"k\">}<\/span> <span class=\"o\">]<\/span>\r\n<span class=\"k\">then\r\n        <\/span><span class=\"nb\">eval<\/span> <span class=\"si\">$(<\/span><span class=\"nb\">tail<\/span> <span class=\"nt\">-1<\/span> <span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT_SAVED<\/span><span class=\"k\">}<\/span><span class=\"si\">)<\/span> <span class=\"o\">&gt;<\/span> \/dev\/null\r\n\r\n        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span>ps <span class=\"nt\">-fp<\/span> <span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT_PID<\/span><span class=\"k\">}<\/span> | <span class=\"nb\">sed<\/span> <span class=\"nt\">-e<\/span> <span class=\"s1\">'s\/  *\/ \/g'<\/span> | <span class=\"nb\">cut<\/span> <span class=\"nt\">-d<\/span><span class=\"s1\">' '<\/span> <span class=\"nt\">-f<\/span> 8 | <span class=\"nb\">grep<\/span> <span class=\"s1\">'^ssh-agent$'<\/span> <span class=\"o\">&gt;<\/span> \/dev\/null<span class=\"o\">)<\/span>\r\n        <span class=\"k\">then\r\n                <\/span><span class=\"nv\">AGENT_ENV<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"nb\">tail<\/span> <span class=\"nt\">-1<\/span> <span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT_SAVED<\/span><span class=\"k\">}<\/span><span class=\"si\">)<\/span>\r\n        <span class=\"k\">else\r\n                <\/span><span class=\"nv\">AGENT_ENV<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT<\/span><span class=\"k\">}<\/span><span class=\"si\">)<\/span>\r\n        <span class=\"k\">fi\r\nelse\r\n        <\/span><span class=\"nv\">AGENT_ENV<\/span><span class=\"o\">=<\/span><span class=\"si\">$(<\/span><span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT<\/span><span class=\"k\">}<\/span><span class=\"si\">)<\/span>\r\n<span class=\"k\">fi\r\n\r\n<\/span><span class=\"nb\">echo<\/span> <span class=\"k\">${<\/span><span class=\"nv\">AGENT_ENV<\/span><span class=\"k\">}<\/span> | <span class=\"nb\">tee<\/span> <span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT_SAVED<\/span><span class=\"k\">}<\/span>\r\n<span class=\"nb\">chmod <\/span>0600 <span class=\"k\">${<\/span><span class=\"nv\">SSH_AGENT_SAVED<\/span><span class=\"k\">}<\/span>\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u52a0\u8f7dssh-agent\u7684\u73af\u5883\u53d8\u91cf\u8bbe\u7f6e\uff0c\u4ee5\u4fbf\u4f7f\u7528ansible\u547d\u4ee4\u3002<\/p>\n<p>\u5728\u975e\u4e92\u52a8\u6267\u884c\u4e2d\uff0c\u60a8\u4ecd\u9700\u8fdb\u884c\u4e00\u4e9b\u524d\u5904\u7406\uff0c\u6bd4\u5982\u8bfb\u53d6\u5df2\u6267\u884c\u7684ssh-agent\/ssh-add\u76f8\u5173\u73af\u5883\u53d8\u91cf\u3002\u503c\u5f97\u63a8\u8350\u7684\u4e00\u70b9\u662f\uff0c\u60a8\u65e0\u9700\u5c06\u5bc6\u7801\u672c\u8eab\u4fdd\u5b58\u5728\u6587\u4ef6\u4e2d\u3002<\/p>\n<h4>\u4f7f\u7528sshpass<\/h4>\n<p>\u5229\u7528sshpass\u53ef\u4ee5\u6307\u5b9a\u5305\u542b\u5bc6\u7801\u7684\u6587\u4ef6\u5e76\u6267\u884c\u3002<\/p>\n<p>\u7531\u4e8esshpass\u4e0d\u662fansible\u7684\u4e00\u90e8\u5206\uff0c\u56e0\u6b64\u9700\u8981\u53e6\u5916\u5b89\u88c5\u5b83\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">sudo <\/span>apt <span class=\"nb\">install <\/span>sshpass\r\n<span class=\"go\">Reading package lists... Done\r\nBuilding dependency tree\r\nReading state information... Done\r\nThe following NEW packages will be installed:\r\n  sshpass\r\n0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\r\n:\r\nProcessing triggers for man-db (2.8.3-2ubuntu0.1) ...\r\n<\/span><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">ls<\/span> <span class=\"nt\">-l<\/span> ~\/.ansible_rings\/.pubkeyuser_passphrase\r\n<span class=\"go\">-rw------- 1 luser luser 19 Jan 12 21:00 \/home\/luser\/.ansible_rings\/.pubkeyuser_passphrase\r\n<\/span><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">cat<\/span> ~\/.ansible_rings\/.pubkeyuser_passphrase\r\n<span class=\"go\">privkey_passphrase\r\n<\/span><span class=\"gp\">(ansible) $<\/span> sshpass <span class=\"nt\">-P<\/span> <span class=\"s2\">\"pubkeyuser_id_rsa':\"<\/span> <span class=\"nt\">-f<\/span> ~\/.ansible_rings\/.pubkeyuser_passphrase ansible <span class=\"nt\">-i<\/span> hosts <span class=\"nt\">-u<\/span> pubkeyuser <span class=\"nt\">--private-key<\/span> pubkeyuser_id_rsa 172.17.0.2 <span class=\"nt\">-m<\/span> ping\r\n<span class=\"gp\">172.17.0.2 | SUCCESS =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"changed\": false,\r\n    \"ping\": \"pong\"\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">cat<\/span> ~\/.ansible_rings\/.pubkeyuser_passphrase | sshpass <span class=\"nt\">-P<\/span> <span class=\"s2\">\"pubkeyuser_id_rsa':\"<\/span> <span class=\"nt\">-d<\/span> 0 ansible <span class=\"nt\">-i<\/span> hosts <span class=\"nt\">-u<\/span> pubkeyuser <span class=\"nt\">--private-key<\/span> pubkeyuser_id_rsa 172.17.0.2 <span class=\"nt\">-m<\/span> ping\r\n<span class=\"gp\">172.17.0.2 | SUCCESS =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"changed\": false,\r\n    \"ping\": \"pong\"\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u8981\u4ee5\u975e\u4ea4\u4e92\u65b9\u5f0f\u4f7f\u7528sshpass\uff0c\u8bf7\u6ce8\u610f\u9700\u8981\u5728\u67d0\u5904\u660e\u6587\u4fdd\u5b58\u5bc6\u7801\u77ed\u8bed\u3002<br \/>\nsshpass\u671f\u671b\u5c06\u5bc6\u7801\u63d0\u793a\u8bbe\u7f6e\u4e3a&#8221;assword&#8221;\uff0c\u56e0\u6b64\u5728\u8f93\u5165\u79c1\u94a5\u5bc6\u7801\u77ed\u8bed\u65f6\u9700\u8981\u4f7f\u7528-P\u9009\u9879\u6765\u6307\u5b9a\u63d0\u793a\u3002<\/p>\n<p>\u7136\u800c\uff0cAnsible\u5e76\u6ca1\u6709\u63d0\u4f9b\u4e00\u79cd\u5c06\u53c2\u6570\u4f20\u9012\u7ed9sshpass\u7684\u65b9\u6cd5\u3002<br \/>\n\u56e0\u6b64\uff0c\u4e3a\u4e86\u8ba9&#8221;assword&#8221;\u51fa\u73b0\u5728\u63d0\u793a\u7b26\u4e0a\uff0c\u6211\u4eec\u5c06\u5728\u79c1\u94a5\u6587\u4ef6\u540d\u4e2d\u5305\u542b&#8221;assword&#8221;\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">ln<\/span> <span class=\"nt\">-s<\/span> pubkeyuser_id_rsa pubkeyuser_id_rsa_assword\r\n<span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">ls<\/span> <span class=\"nt\">-l<\/span> pubkeyuser_id_rsa pubkeyuser_id_rsa_assword\r\n<span class=\"go\">-rw------- 1 luser luser 1766 Jan 11 02:19 pubkeyuser_id_rsa\r\n<\/span><span class=\"gp\">lrwxrwxrwx 1 luser luser   17 Jan 12 21:12 pubkeyuser_id_rsa_assword -&gt;<\/span> pubkeyuser_id_rsa\r\n<span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u901a\u8fc7ssh\u5ba2\u6237\u7aef\u4e8c\u8fdb\u5236\u6587\u4ef6\u8fde\u63a5 &#8211; \u67e5\u770bAnsible\u6587\u6863\u4e2d\u7684\u5bc6\u7801\u884c\u65f6\uff0c\u53ef\u4ee5\u5c06\u5176\u4f5c\u4e3a\u53d8\u91cf(var)\u3002<\/p>\n<blockquote><p>\u53d8\u91cf\uff1aansible_password<br \/>\n\u53d8\u91cf\uff1aansible_ssh_pass<br \/>\n\u53d8\u91cf\uff1aansible_ssh_password<\/p><\/blockquote>\n<p>\u6709\u8bf4\u660e\u53ef\u4ee5\u4f7f\u7528\u3002<br \/>\n\u56e0\u6b64\uff0c\u5c06\u5bc6\u7801\u8bbe\u7f6e\u5728\u4e3b\u673a172.17.0.2\u4e0a\u3002<br \/>\n\uff08\u5982\u4e0b\u6240\u8ff0\uff0c\u6700\u597d\u4e0d\u8981\u4f7f\u7528\u201cansible_ssh_password\u201d\u8fd9\u4e2a\u53c2\u6570\u3002\uff09<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"c1\"># Remote User<\/span>\r\n<span class=\"na\">ansible_ssh_user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">pubkeyuser<\/span>\r\n<span class=\"c1\"># \u79d8\u5bc6\u9375<\/span>\r\n<span class=\"na\">ansible_private_key_file<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/pubkeyuser_id_rsa_assword<\/span>\r\n<span class=\"c1\"># SSH \u5171\u901a\u5f15\u6570<\/span>\r\n<span class=\"na\">ansible_ssh_common_args<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">-o<\/span> <span class=\"s\">PubkeyAuthentication=yes<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PasswordAuthentication=no<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">StrictHostKeyChecking=no\"<\/span>\r\n<span class=\"c1\"># SSH \u79d8\u5bc6\u9375\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba<\/span>\r\n<span class=\"na\">ansible_ssh_pass<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">privkey_passphrase'<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ansible 172.17.0.2 <span class=\"nt\">-m<\/span> ping\r\n<span class=\"gp\">172.17.0.2 | SUCCESS =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"changed\": false,\r\n    \"ping\": \"pong\"\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u80fd\u591f\u5728\u4e0d\u8f93\u5165\u5bc6\u7801\u7684\u60c5\u51b5\u4e0b\u6267\u884c\u64cd\u4f5c\u3002<\/p>\n<h2>\u4f7f\u7528PAM\u5bc6\u7801\u8fdb\u884c\u8fde\u63a5<\/h2>\n<p>\u5e0c\u671b\u907f\u514d\u4f7f\u7528\u767b\u5f55\u5bc6\u7801\u8fdb\u884c\u8fde\u63a5\uff0c\u4f46\u7531\u4e8e\u67d0\u79cd\u539f\u56e0\u6709\u65f6\u5fc5\u987b\u4f7f\u7528\u7528\u6237\u5bc6\u7801\u8fdb\u884cssh\u8fde\u63a5\u3002<br \/>\n\u4f8b\u5982\uff0c\u5728\u521d\u59cb\u72b6\u6001\u4e0b\uff0c\u53ef\u80fd\u8fd8\u6ca1\u6709\u590d\u5236\u516c\u94a5\u7684\u60c5\u51b5\u3002(\u5982\u679c\u53ef\u80fd\u7684\u8bdd\uff0c\u6211\u5e0c\u671b\u5728\u6267\u884cansible\u4e4b\u524d\u6ce8\u518c\u516c\u94a5)<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ssh <span class=\"nt\">-o<\/span> <span class=\"nv\">PubkeyAuthentication<\/span><span class=\"o\">=<\/span>no <span class=\"nt\">-o<\/span> <span class=\"nv\">PasswordAuthentication<\/span><span class=\"o\">=<\/span><span class=\"nb\">yes<\/span> <span class=\"nt\">-o<\/span> <span class=\"nv\">StrictHostKeyChecking<\/span><span class=\"o\">=<\/span>no pwduser@172.17.0.3 <span class=\"nb\">id<\/span> <span class=\"nt\">-a<\/span>\r\n<span class=\"go\">pwduser@172.17.0.3's password: \u2190 \"pwduser\" \u306e\u30ed\u30b0\u30a4\u30f3\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\r\nuid=1001(pwduser) gid=1001(pwduser) groups=1001(pwduser),27(sudo)\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u9700\u8981\u8f93\u5165SSH\u5bc6\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ansible <span class=\"nt\">--ssh-common-args<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"-o PubkeyAuthentication=no -o PasswordAuthentication=yes -o StrictHostKeyChecking=no\"<\/span> <span class=\"nt\">-i<\/span> hosts <span class=\"nt\">-u<\/span> pwduser 172.17.0.3 <span class=\"nt\">-m<\/span> ping\r\n<span class=\"gp\">172.17.0.3 | UNREACHABLE! =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"changed\": false,\r\n    \"msg\": \"Failed to connect to the host via ssh: Permission denied (publickey,password).\",\r\n    \"unreachable\": true\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u5728Ansible\u4e2d\uff0c\u901a\u8fc7\u6307\u5b9a-k\u9009\u9879\uff0c\u53ef\u4ee5\u8be2\u95eeSSH\u5bc6\u7801\u3002\u5982\u679c\u4e0d\u4f7f\u7528\u6b64\u9009\u9879\uff0c\u5c31\u4f1a\u51fa\u73b0\u4e0a\u8ff0\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ansible <span class=\"nt\">--ssh-common-args<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"-o PubkeyAuthentication=no -o PasswordAuthentication=yes -o StrictHostKeyChecking=\"<\/span> <span class=\"nt\">-i<\/span> hosts <span class=\"nt\">-u<\/span> pwduser 172.17.0.3 <span class=\"nt\">-m<\/span> ping <span class=\"nt\">-k<\/span>\r\n<span class=\"go\">SSH password:\r\n<\/span><span class=\"gp\">172.17.0.3 | FAILED! =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"msg\": \"to use the 'ssh' connection type with passwords, you must install the sshpass program\"\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u6dfb\u52a0-k\u9009\u9879\uff0c\u4f1a\u51fa\u73b0\u5bc6\u7801\u8f93\u5165\u63d0\u793a\uff0c\u4f46\u8fd9\u6b21\u4ed6\u8981\u6211\u4eec\u5b89\u88c5sshpass\u7a0b\u5e8f\uff0c\u4ee5\u4fbf\u4f7f\u7528\u5bc6\u7801\u7684ssh\u8fde\u63a5\u7c7b\u578b\u3002\u867d\u7136\u5728\u4f7f\u7528\u516c\u94a5\u8fde\u63a5\u65f6\u4e5f\u4f1a\u7528\u5230\u5b83\uff0c\u4f46sshpass\u5e76\u4e0d\u662fansible\u7684\u4e00\u90e8\u5206\uff0c\u56e0\u6b64\u9700\u8981\u5355\u72ec\u5b89\u88c5\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> <span class=\"nb\">sudo <\/span>apt <span class=\"nb\">install <\/span>sshpass\r\n<span class=\"go\">Reading package lists... Done\r\nBuilding dependency tree\r\nReading state information... Done\r\nThe following NEW packages will be installed:\r\n  sshpass\r\n0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\r\n:\r\nProcessing triggers for man-db (2.8.3-2ubuntu0.1) ...\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u5b89\u88c5sshpass\u540e\uff0c\u5b83\u5c06\u5f00\u59cb\u8fd0\u884c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ansible <span class=\"nt\">--ssh-common-args<\/span><span class=\"o\">=<\/span><span class=\"s2\">\"-o PubkeyAuthentication=no -o PasswordAuthentication=yes -o StrictHostKeyChecking=no\"<\/span> <span class=\"nt\">-i<\/span> hosts <span class=\"nt\">-u<\/span> pwduser 172.17.0.3 <span class=\"nt\">-m<\/span> ping <span class=\"nt\">-k<\/span>\r\n<span class=\"go\">SSH password:\r\n<\/span><span class=\"gp\">172.17.0.3 | SUCCESS =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"changed\": false,\r\n    \"ping\": \"pong\"\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<h3>\u5728\u6279\u5904\u7406\u4e2d\u8bbe\u7f6e\u5bc6\u7801\u77ed\u8bed<\/h3>\n<p>\u4e0e\u516c\u5f00\u5bc6\u94a5\u7684\u60c5\u51b5\u76f8\u540c\uff0c\u5728172.17.0.3.yml\u6587\u4ef6\u4e2d\u8bbe\u7f6e\u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"c1\"># Remote User<\/span>\r\n<span class=\"na\">ansible_ssh_user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">pwduser<\/span>\r\n<span class=\"c1\"># \u30d1\u30b9\u30ef\u30fc\u30c9\u8a8d\u8a3c\u306e\u6307\u5b9a<\/span>\r\n<span class=\"na\">ansible_ssh_common_args<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">-o<\/span> <span class=\"s\">PreferredAuthentications=password<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PubkeyAuthentication=no<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PasswordAuthentication=yes<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">StrictHostKeyChecking=no'<\/span>\r\n<span class=\"c1\"># \u8a8d\u8a3c\u30d1\u30b9\u30ef\u30fc\u30c9<\/span>\r\n<span class=\"na\">ansible_ssh_pass<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">pwduser_password'<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> ansible 172.17.0.3 <span class=\"nt\">-m<\/span> ping\r\n<span class=\"gp\">172.17.0.3 | SUCCESS =&gt;<\/span> <span class=\"o\">{<\/span>\r\n<span class=\"go\">    \"changed\": false,\r\n    \"ping\": \"pong\"\r\n}\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u4e0d\u9700\u8981\u8f93\u5165\u5bc6\u7801\u5c31\u80fd\u6267\u884c\u3002<\/p>\n<h1>sudo (become) \u65f6\u7684\u5bc6\u7801<\/h1>\n<p>\u53c2\u8003\uff1asudo &#8211; \u66ff\u4ee3\u7528\u6237\u6267\u884c &#8211; Ansible\u6587\u6863<\/p>\n<p>\u6839\u636e Ansible \u6587\u6863\u4e2d\u7684\u300csudo &#8211; \u66ff\u6362\u7528\u6237\u6267\u884c\u300d\uff0c\u5bc6\u7801\u7684\u8bbe\u7f6e\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<blockquote><p>\u539f\u59cb\u6761\u76ee\uff1a<br \/>\n[sudo_become_plugin]<br \/>\n\u5bc6\u7801 = VALUE<\/p>\n<p>env:ANSIBLE_BECOME_PASS<br \/>\nenv:ANSIBLE_SUDO_PASS<br \/>\nvar: ansible_become_password<br \/>\nvar: ansible_become_pass<br \/>\nvar: ansible_sudo_pass<\/p>\n<p>\u91cd\u8ff0\u6761\u76ee\uff1a<br \/>\n[sudo_become_plugin]<br \/>\n\u5bc6\u7801 = VALUE<\/p>\n<p>\u73af\u5883\u53d8\u91cf\uff1aANSIBLE_BECOME_PASS<br \/>\n\u73af\u5883\u53d8\u91cf\uff1aANSIBLE_SUDO_PASS<br \/>\n\u53d8\u91cf\uff1aansible_become_password<br \/>\n\u53d8\u91cf\uff1aansible_become_pass<br \/>\n\u53d8\u91cf\uff1aansible_sudo_pass<\/p><\/blockquote>\n<p>\u4f7f\u7528\u53d8\u91cf&#8221;ansible_become_pass&#8221;\uff0c\u5c06\u5176\u8bbe\u7f6e\u4e3a&#8221;172.17.0.2.yml&#8221;\u548c&#8221;172.17.0.3.yml&#8221;\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"c1\"># Remote User<\/span>\r\n<span class=\"na\">ansible_ssh_user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">pubkeyuser<\/span>\r\n<span class=\"c1\"># \u79d8\u5bc6\u9375<\/span>\r\n<span class=\"na\">ansible_private_key_file<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/pubkeyuser_id_rsa_assword<\/span>\r\n<span class=\"c1\"># SSH \u5171\u901a\u5f15\u6570<\/span>\r\n<span class=\"na\">ansible_ssh_common_args<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">-o<\/span> <span class=\"s\">PubkeyAuthentication=yes<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PasswordAuthentication=no<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">StrictHostKeyChecking=no\"<\/span>\r\n<span class=\"c1\"># SSH \u79d8\u5bc6\u9375\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba<\/span>\r\n<span class=\"na\">ansible_ssh_pass<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">privkey_passphrase'<\/span>\r\n\r\n<span class=\"c1\"># become (sudo) \u30d1\u30b9\u30ef\u30fc\u30c9<\/span>\r\n<span class=\"na\">ansible_sudo_pass<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">pubkeyuser_password'<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"c1\"># Remote User<\/span>\r\n<span class=\"na\">ansible_ssh_user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">pwduser<\/span>\r\n<span class=\"c1\"># \u30d1\u30b9\u30ef\u30fc\u30c9\u8a8d\u8a3c\u306e\u6307\u5b9a<\/span>\r\n<span class=\"na\">ansible_ssh_common_args<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">-o<\/span> <span class=\"s\">PreferredAuthentications=password<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PubkeyAuthentication=no<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PasswordAuthentication=yes<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">StrictHostKeyChecking=no'<\/span>\r\n<span class=\"c1\"># \u8a8d\u8a3c\u30d1\u30b9\u30ef\u30fc\u30c9<\/span>\r\n<span class=\"na\">ansible_ssh_pass<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">pwduser_password'<\/span>\r\n\r\n<span class=\"c1\"># become (sudo) \u30d1\u30b9\u30ef\u30fc\u30c9<\/span>\r\n<span class=\"na\">ansible_sudo_pass<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">pwduser_password'<\/span>\r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u5b9e\u73b0\u65e0\u9700\u8f93\u5165\u5bc6\u7801\uff08\u975e\u4ea4\u4e92\u5f0f\uff09\u5373\u53ef\u6267\u884c become\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> <span class=\"o\">(<\/span> <span class=\"nb\">set<\/span> <span class=\"nt\">-x<\/span><span class=\"p\">;<\/span> <span class=\"k\">for <\/span>h <span class=\"k\">in <\/span>172.17.0.2 172.17.0.3 hostgroup<span class=\"p\">;<\/span> <span class=\"k\">do <\/span>ansible <span class=\"nv\">$h<\/span> <span class=\"nt\">-m<\/span> <span class=\"nb\">command<\/span> <span class=\"nt\">-a<\/span> <span class=\"s1\">'id -a'<\/span><span class=\"p\">;<\/span> ansible <span class=\"nv\">$h<\/span> <span class=\"nt\">-m<\/span> <span class=\"nb\">command<\/span> <span class=\"nt\">-a<\/span> <span class=\"s1\">'id -a'<\/span> <span class=\"nt\">-b<\/span><span class=\"p\">;<\/span> <span class=\"k\">done<\/span> <span class=\"o\">)<\/span>\r\n<span class=\"go\">+ for h in 172.17.0.2 172.17.0.3 hostgroup\r\n+ ansible 172.17.0.2 -m command -a 'id -a'\r\n<\/span><span class=\"gp\">172.17.0.2 | CHANGED | rc=0 &gt;<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"go\">uid=1001(pubkeyuser) gid=1001(pubkeyuser) groups=1001(pubkeyuser),27(sudo)\r\n\r\n+ ansible 172.17.0.2 -m command -a 'id -a' -b\r\n<\/span><span class=\"gp\">172.17.0.2 | CHANGED | rc=0 &gt;<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"go\">uid=0(root) gid=0(root) groups=0(root)\r\n\r\n+ for h in 172.17.0.2 172.17.0.3 hostgroup\r\n+ ansible 172.17.0.3 -m command -a 'id -a'\r\n<\/span><span class=\"gp\">172.17.0.3 | CHANGED | rc=0 &gt;<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"go\">uid=1001(pwduser) gid=1001(pwduser) groups=1001(pwduser),27(sudo)\r\n\r\n+ ansible 172.17.0.3 -m command -a 'id -a' -b\r\n<\/span><span class=\"gp\">172.17.0.3 | CHANGED | rc=0 &gt;<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"go\">uid=0(root) gid=0(root) groups=0(root)\r\n\r\n+ for h in 172.17.0.2 172.17.0.3 hostgroup\r\n+ ansible hostgroup -m command -a 'id -a'\r\n<\/span><span class=\"gp\">172.17.0.3 | CHANGED | rc=0 &gt;<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"go\">uid=1001(pwduser) gid=1001(pwduser) groups=1001(pwduser),27(sudo)\r\n\r\n<\/span><span class=\"gp\">172.17.0.2 | CHANGED | rc=0 &gt;<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"go\">uid=1001(pubkeyuser) gid=1001(pubkeyuser) groups=1001(pubkeyuser),27(sudo)\r\n\r\n+ ansible hostgroup -m command -a 'id -a' -b\r\n<\/span><span class=\"gp\">172.17.0.3 | CHANGED | rc=0 &gt;<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"go\">uid=0(root) gid=0(root) groups=0(root)\r\n\r\n<\/span><span class=\"gp\">172.17.0.2 | CHANGED | rc=0 &gt;<\/span><span class=\"o\">&gt;<\/span>\r\n<span class=\"go\">uid=0(root) gid=0(root) groups=0(root)\r\n\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<h1>\u4f7f\u7528ansible-vault\u8fdb\u884c\u52a0\u5bc6<\/h1>\n<p>\u53c2\u8003\u8d44\u6599\uff1aAnsible Vault \u2014 Ansible \u6587\u6863<\/p>\n<p>\u901a\u8fc7\u5c06\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed\u8bbe\u7f6e\u4e3a\u5404\u4e2a\u53d8\u91cf\uff0c\u73b0\u5728\u53ef\u4ee5\u5728\u4e0d\u8f93\u5165\u7684\u60c5\u51b5\u4e0b\u6267\u884c\uff0c\u4f46\u662f\u660e\u6587\u4fdd\u5b58\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed\u662f\u4e0d\u53ef\u53d6\u7684\u3002<\/p>\n<p>\u56e0\u6b64\uff0c\u53ef\u4ee5\u4f7f\u7528ansible-vault\u8fdb\u884c\u52a0\u5bc6\u3002<br \/>\n\u4f7f\u7528ansible-vault\u53ef\u4ee5\u5b9e\u73b0\u4ee5\u4e0b\u64cd\u4f5c\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d5\u30a1\u30a4\u30eb\u5168\u4f53\u3092\u6697\u53f7\u5316\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">key=value \u3092\u6697\u53f7\u5316\u3059\u308b<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">value \u90e8\u5206\u3092\u6697\u53f7\u5316\u3059\u308b<\/ul>\n<p>\u5728\u8fd9\u91cc\uff0c\u6211\u4eec\u5c06\u5c55\u793a\u4e00\u4e2a\u5177\u4f53\u793a\u4f8b\uff0c\u5373\u52a0\u5bc6\u4e86\u7b2c\u4e09\u4e2a value \u90e8\u5206\u7684\u60c5\u51b5\u3002\u8bf7\u53c2\u8003 &#8220;Ansible Vault \u2014 Ansible Documentation&#8221; \u83b7\u53d6\u8be6\u7ec6\u4fe1\u606f\u3002<\/p>\n<p>\u5728 ansible-vault \u4e2d\uff0c\u6709\u4e00\u4e2a\u53eb\u4f5c vault-id \u7684\u4e1c\u897f\uff0c\u5728\u6587\u6863\u4e2d\u63cf\u8ff0\u5f97\u5f88\u96be\u7406\u89e3\u3002<\/p>\n<p>&#8211;vault-id \u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3001ID \u30ea\u30b9\u30c8 (\u30ab\u30f3\u30de\u533a\u5207\u308a\u3067\u8907\u6570\u6307\u5b9a\u53ef) \u3092\u63d0\u793a\u3057\u3001&#8211;encrypt-vault-id \u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3001\u6697\u53f7\u5316\u6642\u306e ID (label) \u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<br \/>\nvault-id \u306e\u5f62\u5f0f\u306f\u3001&#8221;label@\u30d1\u30b9\u30ef\u30fc\u30c9\u30d5\u30a1\u30a4\u30eb\u540d&#8221; \u3068\u3044\u3046\u5f62\u3067\u3001label \u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u8a18\u8f09\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u540d\u306e\u7d44\u307f\u5408\u308f\u305b\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p>\u6211\u51b3\u5b9a\u5c06ansible-vault\u7684\u52a0\u5bc6\/\u89e3\u5bc6\u5bc6\u7801\u8bbe\u7f6e\u5728\u5982\u4e0b\u6587\u4ef6\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> tree <span class=\"nt\">-a<\/span> ~\/.ansible_rings\/\r\n<span class=\"go\">\/home\/luser\/.ansible_rings\/\r\n|-- .vault_pass_sample.txt\r\n|-- .vault_pass_sample1.txt\r\n|-- .vault_pass_sample2.txt\r\n|-- .vault_pass_sample3.txt\r\n|-- .vault_pass_sample4.txt\r\n`-- .vault_pass_sample_default.txt\r\n\r\n0 directories, 6 files\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>samplepassword\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>sample1password\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>sample2password\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>sample3password\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>sample4password\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>defaultPassword\r\n<\/code><\/pre>\n<p>\u7136\u540e\uff0c\u6211\u4eec\u5c06\u5728ansible.cfg\u4e2d\u8fdb\u884cansible-vault\u7684\u914d\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">[defaults]<\/span>\r\n<span class=\"py\">interpreter_python<\/span>      <span class=\"p\">=<\/span> <span class=\"s\">\/usr\/bin\/python3<\/span>\r\n<span class=\"c\"># \u30a4\u30f3\u30d9\u30f3\u30c8\u30ea\r\n<\/span><span class=\"py\">inventory<\/span>               <span class=\"p\">=<\/span> <span class=\"s\">hosts<\/span>\r\n<span class=\"c\"># ansible-vault \u95a2\u9023\r\n<\/span><span class=\"py\">vault_identity<\/span>          <span class=\"p\">=<\/span> <span class=\"s\">sample<\/span>\r\n<span class=\"py\">vault_encrypt_identity<\/span>  <span class=\"p\">=<\/span> <span class=\"s\">sample<\/span>\r\n<span class=\"py\">vault_identity_list<\/span>     <span class=\"p\">=<\/span> <span class=\"s\">sample@~\/.ansible_rings\/.vault_pass_sample.txt,sample1@~\/.ansible_rings\/.vault_pass_sample1.txt,sample2@~\/.ansible_rings\/.vault_pass_sample2.txt,sample3@~\/.ansible_rings\/.vault_pass_sample3.txt,sample4@~\/.ansible_rings\/.vault_pass_sample4.txt,@~\/.ansible_rings\/.vault_pass_sample_default.txt<\/span>\r\n\r\n<span class=\"c\">#[privilege_escalation]\r\n## become (sudo)\r\n#become                 = True\r\n<\/span><\/code><\/pre>\n<p>\u5b8c\u6210ansible.cfg\u914d\u7f6e\u540e\uff0c\u5c06\u8fdb\u884c\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed\u7684\u52a0\u5bc6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"gp\">(ansible) $<\/span> <span class=\"o\">(<\/span> <span class=\"nb\">set<\/span> <span class=\"nt\">-x<\/span><span class=\"p\">;<\/span> <span class=\"o\">(<\/span> <span class=\"k\">while <\/span><span class=\"nb\">read <\/span>n p s<span class=\"p\">;<\/span> <span class=\"k\">do <\/span>ansible-vault encrypt_string <span class=\"nt\">-v<\/span> <span class=\"nt\">--encrypt-vault-id<\/span> <span class=\"nv\">$s<\/span> <span class=\"nt\">-n<\/span> <span class=\"nv\">$n<\/span> <span class=\"nv\">$p<\/span><span class=\"p\">;<\/span> <span class=\"k\">done<\/span> <span class=\"o\">)<\/span> <span class=\"o\">&lt;&lt;<\/span> <span class=\"no\">EOT<\/span>\r\n<span class=\"go\">ansible_ssh_pass privkey_passphrase sample1\r\nansible_sudo_pass pubkeyuser_password sample2\r\nansible_ssh_pass pwduser_password sample3\r\nansible_sudo_pass pwduser_password sample4\r\nEOT\r\n)\r\n+ cat\r\n+ read n p s\r\n+ ansible-vault encrypt_string -v --encrypt-vault-id sample1 -n ansible_ssh_pass privkey_passphrase\r\nUsing \/home\/luser\/work\/Ansible.d\/passwordtest.withVault\/ansible.cfg as config file\r\nansible_ssh_pass: !vault |\r\n<\/span><span class=\"gp\">          $<\/span>ANSIBLE_VAULT<span class=\"p\">;<\/span>1.2<span class=\"p\">;<\/span>AES256<span class=\"p\">;<\/span>sample1\r\n<span class=\"go\">          31386662393263333631396165646631616139323064346631633931363563323330643035393366\r\n          3132633136633734383665373135343833353835396461640a633132663862633130653735633436\r\n          61613535333964383162373135383966643438303661326333303337656263626262303232333961\r\n          3436656633316232310a636336323737323761346535613761623038623362636565633934656437\r\n          30633462363565383035626165393832626465636161313932333866306266666638\r\nEncryption successful\r\n+ read n p s\r\n+ ansible-vault encrypt_string -v --encrypt-vault-id sample2 -n ansible_sudo_pass pubkeyuser_password\r\nUsing \/home\/luser\/work\/Ansible.d\/passwordtest.withVault\/ansible.cfg as config file\r\nansible_sudo_pass: !vault |\r\n<\/span><span class=\"gp\">          $<\/span>ANSIBLE_VAULT<span class=\"p\">;<\/span>1.2<span class=\"p\">;<\/span>AES256<span class=\"p\">;<\/span>sample2\r\n<span class=\"go\">          34646236623634393565333836346238333662313466323762316462636637633735326330393261\r\n          6335373233666334386362626661653363373563393763360a633161336663303737376535393638\r\n          65333033333330326534643233336466363931336633643464373862653663316665373331616566\r\n          3333343232306266350a656464363232376661626135613063333032353037376333323830363538\r\n          35333362353534376664613736343765373862333631346338656634383262373935\r\nEncryption successful\r\n+ read n p s\r\n+ ansible-vault encrypt_string -v --encrypt-vault-id sample3 -n ansible_ssh_pass pwduser_password\r\nUsing \/home\/luser\/work\/Ansible.d\/passwordtest.withVault\/ansible.cfg as config file\r\nansible_ssh_pass: !vault |\r\n<\/span><span class=\"gp\">          $<\/span>ANSIBLE_VAULT<span class=\"p\">;<\/span>1.2<span class=\"p\">;<\/span>AES256<span class=\"p\">;<\/span>sample3\r\n<span class=\"go\">          39623031313762626535383264623838613435306233323863363466363231663265363230653666\r\n          3739666333396133313332613563626238323665636638300a653433303139373734326562633735\r\n          36303536366533323665623436633939393138393064633435383063366531373662343339643631\r\n          6263386465663838630a623365383336373536343039343663393662396162613433646132373438\r\n          61326165326566373761613831663961363237376563653863666330336330396139\r\nEncryption successful\r\n+ read n p s\r\n+ ansible-vault encrypt_string -v --encrypt-vault-id sample4 -n ansible_sudo_pass pwduser_password\r\nUsing \/home\/luser\/work\/Ansible.d\/passwordtest.withVault\/ansible.cfg as config file\r\nansible_sudo_pass: !vault |\r\n<\/span><span class=\"gp\">          $<\/span>ANSIBLE_VAULT<span class=\"p\">;<\/span>1.2<span class=\"p\">;<\/span>AES256<span class=\"p\">;<\/span>sample4\r\n<span class=\"go\">          62346235306363343334653464653235373632386165383735343038313765633133376462663737\r\n          3532323962316536663333363366666432383832323531340a336132376130326430633765333566\r\n          66336238653038366233323834383862303262336435623039316135613139303862306133646562\r\n          3162393332343931370a366365666564326462396365376434353234353661353763626465383734\r\n          65383938383535356137313531613631646366363231393737656266383134353239\r\nEncryption successful\r\n+ read n p s\r\n<\/span><span class=\"gp\">(ansible) $<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u8981\u5c06\u5176\u5199\u5165\u6587\u4ef6\uff0c\u53ef\u4ee5\u4f7f\u7528 &#8211;output \u9009\u9879\uff1b\u5728\u4e0a\u9762\u5df2\u7ecf\u5c06\u5176\u663e\u793a\u5728\u6807\u51c6\u8f93\u51fa\u4e2d\u4e86\u3002<\/p>\n<p>\u5c06\u6bcf\u4e2a\u8f93\u51fa\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"c1\"># Remote User<\/span>\r\n<span class=\"na\">ansible_ssh_user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">pubkeyuser<\/span>\r\n<span class=\"c1\"># \u79d8\u5bc6\u9375<\/span>\r\n<span class=\"na\">ansible_private_key_file<\/span><span class=\"pi\">:<\/span> <span class=\"s\">.\/pubkeyuser_id_rsa_assword<\/span>\r\n<span class=\"c1\"># SSH \u5171\u901a\u5f15\u6570<\/span>\r\n<span class=\"na\">ansible_ssh_common_args<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">-o<\/span> <span class=\"s\">PubkeyAuthentication=yes<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PasswordAuthentication=no<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">StrictHostKeyChecking=no\"<\/span>\r\n<span class=\"c1\"># SSH \u79d8\u5bc6\u9375\u30d1\u30b9\u30d5\u30ec\u30fc\u30ba<\/span>\r\n<span class=\"c1\">#ansible_ssh_pass: 'privkey_passphrase'<\/span>\r\n<span class=\"na\">ansible_ssh_pass<\/span><span class=\"pi\">:<\/span> <span class=\"kt\">!vault<\/span> <span class=\"pi\">|<\/span>\r\n                  <span class=\"s\">$ANSIBLE_VAULT;1.2;AES256;sample1<\/span>\r\n                  <span class=\"s\">31386662393263333631396165646631616139323064346631633931363563323330643035393366<\/span>\r\n                  <span class=\"s\">3132633136633734383665373135343833353835396461640a633132663862633130653735633436<\/span>\r\n                  <span class=\"s\">61613535333964383162373135383966643438303661326333303337656263626262303232333961<\/span>\r\n                  <span class=\"s\">3436656633316232310a636336323737323761346535613761623038623362636565633934656437<\/span>\r\n                  <span class=\"s\">30633462363565383035626165393832626465636161313932333866306266666638<\/span>\r\n\r\n<span class=\"c1\"># become (sudo) \u30d1\u30b9\u30ef\u30fc\u30c9<\/span>\r\n<span class=\"c1\">#ansible_sudo_pass: 'pubkeyuser_password'<\/span>\r\n<span class=\"na\">ansible_sudo_pass<\/span><span class=\"pi\">:<\/span> <span class=\"kt\">!vault<\/span> <span class=\"pi\">|<\/span>\r\n                   <span class=\"s\">$ANSIBLE_VAULT;1.2;AES256;sample2<\/span>\r\n                   <span class=\"s\">34646236623634393565333836346238333662313466323762316462636637633735326330393261<\/span>\r\n                   <span class=\"s\">6335373233666334386362626661653363373563393763360a633161336663303737376535393638<\/span>\r\n                   <span class=\"s\">65333033333330326534643233336466363931336633643464373862653663316665373331616566<\/span>\r\n                   <span class=\"s\">3333343232306266350a656464363232376661626135613063333032353037376333323830363538<\/span>\r\n                   <span class=\"s\">35333362353534376664613736343765373862333631346338656634383262373935<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"nn\">---<\/span>\r\n<span class=\"c1\"># Remote User<\/span>\r\n<span class=\"na\">ansible_ssh_user<\/span><span class=\"pi\">:<\/span> <span class=\"s\">pwduser<\/span>\r\n<span class=\"c1\"># \u30d1\u30b9\u30ef\u30fc\u30c9\u8a8d\u8a3c\u306e\u6307\u5b9a<\/span>\r\n<span class=\"na\">ansible_ssh_common_args<\/span><span class=\"pi\">:<\/span> <span class=\"s1\">'<\/span><span class=\"s\">-o<\/span> <span class=\"s\">PreferredAuthentications=password<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PubkeyAuthentication=no<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">PasswordAuthentication=yes<\/span> <span class=\"s\">-o<\/span> <span class=\"s\">StrictHostKeyChecking=no'<\/span>\r\n<span class=\"c1\"># \u8a8d\u8a3c\u30d1\u30b9\u30ef\u30fc\u30c9<\/span>\r\n<span class=\"c1\">#ansible_ssh_pass: 'pwduser_password'<\/span>\r\n<span class=\"na\">ansible_ssh_pass<\/span><span class=\"pi\">:<\/span> <span class=\"kt\">!vault<\/span> <span class=\"pi\">|<\/span>\r\n                  <span class=\"s\">$ANSIBLE_VAULT;1.2;AES256;sample3<\/span>\r\n                  <span class=\"s\">39623031313762626535383264623838613435306233323863363466363231663265363230653666<\/span>\r\n                  <span class=\"s\">3739666333396133313332613563626238323665636638300a653433303139373734326562633735<\/span>\r\n                  <span class=\"s\">36303536366533323665623436633939393138393064633435383063366531373662343339643631<\/span>\r\n                  <span class=\"s\">6263386465663838630a623365383336373536343039343663393662396162613433646132373438<\/span>\r\n                  <span class=\"s\">61326165326566373761613831663961363237376563653863666330336330396139<\/span>\r\n\r\n<span class=\"c1\"># become (sudo) \u30d1\u30b9\u30ef\u30fc\u30c9<\/span>\r\n<span class=\"c1\">#ansible_sudo_pass: 'pwduser_password'<\/span>\r\n<span class=\"na\">ansible_sudo_pass<\/span><span class=\"pi\">:<\/span> <span class=\"kt\">!vault<\/span> <span class=\"pi\">|<\/span>\r\n                   <span class=\"s\">$ANSIBLE_VAULT;1.2;AES256;sample4<\/span>\r\n                   <span class=\"s\">62346235306363343334653464653235373632386165383735343038313765633133376462663737<\/span>\r\n                   <span class=\"s\">3532323962316536663333363366666432383832323531340a336132376130326430633765333566<\/span>\r\n                   <span class=\"s\">66336238653038366233323834383862303262336435623039316135613139303862306133646562<\/span>\r\n                   <span class=\"s\">3162393332343931370a366365666564326462396365376434353234353661353763626465383734<\/span>\r\n                   <span class=\"s\">65383938383535356137313531613631646366363231393737656266383134353239<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code>(ansible) $ ( set -x; for h in 172.17.0.2 172.17.0.3 hostgroup; do ansible $h -m command -a 'id -a'; ansible $h -m command -a 'id -a' -b; done )\r\n+ for h in 172.17.0.2 172.17.0.3 hostgroup\r\n+ ansible 172.17.0.2 -m command -a 'id -a'\r\n172.17.0.2 | CHANGED | rc=0 &gt;&gt;\r\nuid=1001(pubkeyuser) gid=1001(pubkeyuser) groups=1001(pubkeyuser),27(sudo)\r\n\r\n+ ansible 172.17.0.2 -m command -a 'id -a' -b\r\n172.17.0.2 | CHANGED | rc=0 &gt;&gt;\r\nuid=0(root) gid=0(root) groups=0(root)\r\n\r\n+ for h in 172.17.0.2 172.17.0.3 hostgroup\r\n+ ansible 172.17.0.3 -m command -a 'id -a'\r\n172.17.0.3 | CHANGED | rc=0 &gt;&gt;\r\nuid=1001(pwduser) gid=1001(pwduser) groups=1001(pwduser),27(sudo)\r\n\r\n+ ansible 172.17.0.3 -m command -a 'id -a' -b\r\n172.17.0.3 | CHANGED | rc=0 &gt;&gt;\r\nuid=0(root) gid=0(root) groups=0(root)\r\n\r\n+ for h in 172.17.0.2 172.17.0.3 hostgroup\r\n+ ansible hostgroup -m command -a 'id -a'\r\n172.17.0.2 | CHANGED | rc=0 &gt;&gt;\r\nuid=1001(pubkeyuser) gid=1001(pubkeyuser) groups=1001(pubkeyuser),27(sudo)\r\n\r\n172.17.0.3 | CHANGED | rc=0 &gt;&gt;\r\nuid=1001(pwduser) gid=1001(pwduser) groups=1001(pwduser),27(sudo)\r\n\r\n+ ansible hostgroup -m command -a 'id -a' -b\r\n172.17.0.2 | CHANGED | rc=0 &gt;&gt;\r\nuid=0(root) gid=0(root) groups=0(root)\r\n\r\n172.17.0.3 | CHANGED | rc=0 &gt;&gt;\r\nuid=0(root) gid=0(root) groups=0(root)\r\n\r\n(ansible) $\r\n<\/code><\/pre>\n<p>\u63a8\u8350\u4f7f\u7528ssh-agent\/ssh-add\u6765\u7ba1\u7406ssh\u7684\u5bc6\u7801\uff0c\u5e76\u4e14\u5efa\u8bae\u4f7f\u7528ansible-vault\u5bf9become\uff08sudo\uff09\u5bc6\u7801\u8fdb\u884c\u52a0\u5bc6\uff0c\u5e76\u4e14\u4e25\u683c\u4fdd\u7ba1\u5305\u542b\u89e3\u5bc6\u5bc6\u7801\u7684\u6587\u4ef6\u3002<\/p>\n<h1>SSH\u5bc6\u7801\u8bbe\u7f6e\u7684\u63d0\u793a<\/h1>\n<p>(Note: This translation is in Simplified Chinese)<\/p>\n<p>ssh \u2013 connect via ssh client binary \u2014 Ansible Documentation \u306e password \u306e\u8aac\u660e\u3067\u306f\u3001\u5909\u6570\u540d\u3068\u3057\u3066 ansible_ssh_password \u304c\u4f7f\u3048\u308b\u3088\u3046\u306b\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b\u304c\u3001ansible_ssh_pass \u3068 ansible_password \u306e\u307f\u304c\u5b9f\u88c5\u3055\u308c\u3066\u304a\u308a\u3001ansible_ssh_password \u306f\u5b9f\u88c5\u3055\u308c\u3066\u3044\u306a\u3044\u3002<\/p>\n<blockquote><p>\u53d8\u91cf\uff1aansible\u5bc6\u7801<br \/>\n\u53d8\u91cf\uff1aansible SSH\u5bc6\u7801<br \/>\n\u53d8\u91cf\uff1aansible SSH\u5bc6\u7801<\/p><\/blockquote>\n<ul class=\"post-ul\">\u4ee5\u4e0b\u306e\u4fee\u6b63\u3092\u52a0\u3048\u308c\u3070\u4f7f\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308b\u304c\u3001\u56de\u907f\u7b56(ansible_ssh_pass \u304b ansible_password \u3092\u4f7f\u7528\u3059\u308b)\u304c\u3042\u308b\u306e\u3068\u3001\u307e\u3068\u3081\u3088\u3046\u3068\u3044\u3046 issue \u3082\u3042\u308b\u3067\u3001\u4fee\u6b63\u3055\u308c\u308b\u304b\u3069\u3046\u304b\u306f\u4e0d\u660e\u3002<\/ul>\n<pre class=\"post-pre\"><code><span class=\"err\">***<\/span> constants.py.orig   2019-12-04 23:10:58.000000000 +0000\r\n<span class=\"gd\">--- constants.py        2020-01-10 05:16:07.520928899 +0000\r\n<\/span><span class=\"err\">***************<\/span>\r\n*** 140,146 ****\r\n      # connection common\r\n      remote_addr=('ansible_ssh_host', 'ansible_host'),\r\n      remote_user=('ansible_ssh_user', 'ansible_user'),\r\n<span class=\"gs\">!     password=('ansible_ssh_pass', 'ansible_password'),\r\n<\/span>      port=('ansible_ssh_port', 'ansible_port'),\r\n      pipelining=('ansible_ssh_pipelining', 'ansible_pipelining'),\r\n      timeout=('ansible_ssh_timeout', 'ansible_timeout'),\r\n<span class=\"gd\">--- 140,146 ----\r\n<\/span>      # connection common\r\n      remote_addr=('ansible_ssh_host', 'ansible_host'),\r\n      remote_user=('ansible_ssh_user', 'ansible_user'),\r\n<span class=\"gs\">!     password=('ansible_ssh_password', 'ansible_ssh_pass', 'ansible_password'),\r\n<\/span>      port=('ansible_ssh_port', 'ansible_port'),\r\n      pipelining=('ansible_ssh_pipelining', 'ansible_pipelining'),\r\n      timeout=('ansible_ssh_timeout', 'ansible_timeout'),\r\n<\/code><\/pre>\n<div>\u4e00\u822c\u6765\u8bf4\uff0c\u901a\u8fc7\u4f7f\u7528\u767b\u5f55\u5bc6\u7801\u8fdb\u884c\u8fde\u63a5\u8f93\u5165\u7684\u5bc6\u7801\u548c\u901a\u8fc7sudo\u63d0\u5347\u81f3\u7ba1\u7406\u6743\u9650\u7684\u5bc6\u7801\u662f\u76f8\u540c\u7684\uff0c\u56e0\u6b64\u5982\u679c\u767b\u5f55\u5bc6\u7801\u6cc4\u9732\uff0c\u76ee\u6807\u670d\u52a1\u5668\u4e0a\u7684\u7ba1\u7406\u5458\u6743\u9650\u5c31\u4f1a\u53d7\u5230\u653b\u51fb\u7684\u98ce\u9669\u589e\u52a0\u3002\u6211\u4eec\u5efa\u8bae\u5c06\u7528\u4e8e\u767b\u5f55\u7684\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed\u548c\u7528\u4e8e\u6743\u9650\u63d0\u5347\u7684sudo\u5bc6\u7801\u5206\u5f00\uff08\u5373\u5c3d\u91cf\u4e0d\u8981\u4f7f\u7528\u767b\u5f55\u5bc6\u7801\u8fdb\u884c\u767b\u5f55\uff09\u3002<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u6709\u5173\u5728Ansible\u4e2d\u6307\u5b9a\u5bc6\u7801\u7684\u603b\u7ed3(\u4f7f\u7528\u65b9\u6cd5)\u3002 \u7b80\u8981\u6982\u8ff0 SSH\u8fde\u63a5\u5bc6\u7801 ssh \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u81ea\u52d5\u5165\u529b\u3059 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-42295","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>Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed - 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\/andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801-\u5bc6\u7801\u77ed\u8bed\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed\" \/>\n<meta property=\"og:description\" content=\"\u6709\u5173\u5728Ansible\u4e2d\u6307\u5b9a\u5bc6\u7801\u7684\u603b\u7ed3(\u4f7f\u7528\u65b9\u6cd5)\u3002 \u7b80\u8981\u6982\u8ff0 SSH\u8fde\u63a5\u5bc6\u7801 ssh \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u81ea\u52d5\u5165\u529b\u3059 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801-\u5bc6\u7801\u77ed\u8bed\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-08T11:12:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T21:35:15+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u626c\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u626c\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 \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\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/\",\"name\":\"Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-02-08T11:12:37+00:00\",\"dateModified\":\"2024-04-29T21:35:15+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed\"}]},{\"@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\/cb5556d2501da73d864cac945e8d9461\",\"name\":\"\u6e05, \u626c\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u626c\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed - 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\/andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801-\u5bc6\u7801\u77ed\u8bed\/","og_locale":"zh_CN","og_type":"article","og_title":"Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed","og_description":"\u6709\u5173\u5728Ansible\u4e2d\u6307\u5b9a\u5bc6\u7801\u7684\u603b\u7ed3(\u4f7f\u7528\u65b9\u6cd5)\u3002 \u7b80\u8981\u6982\u8ff0 SSH\u8fde\u63a5\u5bc6\u7801 ssh \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u81ea\u52d5\u5165\u529b\u3059 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801-\u5bc6\u7801\u77ed\u8bed\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-02-08T11:12:37+00:00","article_modified_time":"2024-04-29T21:35:15+00:00","author":"\u6e05, \u626c","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u626c","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"10 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/","name":"Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-02-08T11:12:37+00:00","dateModified":"2024-04-29T21:35:15+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Andible\u81ea\u52a8\u586b\u5199\u5bc6\u7801\/\u5bc6\u7801\u77ed\u8bed"}]},{"@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\/cb5556d2501da73d864cac945e8d9461","name":"\u6e05, \u626c","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","caption":"\u6e05, \u626c"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/andible%e8%87%aa%e5%8a%a8%e5%a1%ab%e5%86%99%e5%af%86%e7%a0%81-%e5%af%86%e7%a0%81%e7%9f%ad%e8%af%ad\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42295","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\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=42295"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42295\/revisions"}],"predecessor-version":[{"id":90009,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/42295\/revisions\/90009"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=42295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=42295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=42295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}