<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Ansible 免密登錄與主機清單配置

      Ansible 通過 SSH 協(xié)議免密登錄遠(yuǎn)程主機

      安裝好 ansible 后,第一件事當(dāng)然是連接上遠(yuǎn)程主機。

      1. 批量掃描主機指紋

      ansible 使用 ssh 協(xié)議登錄遠(yuǎn)程主機進行操作,我想用過 ssh user@host 命令的都知道,首次登錄遠(yuǎn)程主機時都會有如下提示:

      ryan@RYAN-MI-DESKTOP:~$ ssh user@github.com
      The authenticity of host 'github.com (13.250.177.223)' can't be established.
      RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
      Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
      Warning: Permanently added 'github.com,13.250.177.223' (RSA) to the list of known hosts.
      

      這里會要求你輸入 yes 將主機指紋保存到本地,是一種安全措施,防止在遇到 DNS 污染或 IP 沖突等異常情況時,目標(biāo)主機被冒名頂替。

      Ansible 默認(rèn)情況下也會使用這個指紋對主機進行驗證,因此我們希望能夠快速地掃描出所有主機的指紋,這里使用 ssh-keyscan 命令:

      echo "
      192.168.58.131
      192.168.58.132
      192.168.58.133
      " > my-hosts
      ssh-keyscan -f my-hosts >> ~/.ssh/known_hosts
      # 或者添加 -H 參數(shù),只保存主機 IP/域名的 hash 值,更安全
      ssh-keyscan -H -f my-hosts >> ~/.ssh/known_hosts
      

      2. 設(shè)置免密登錄

      大量的遠(yuǎn)程主機都使用同一個密碼提供 ssh 遠(yuǎn)程登錄是很不安全的,一般都建議所有主機都只開啟私鑰登錄,禁用密碼登錄。相關(guān)配置在主機的 /etc/ssh/sshd_config 中,詳細(xì)配置方法請自行搜索。

      2.1 虛擬機免密登錄的快捷設(shè)置方法

      1. 如果你使用的 ProxmoxVE 等支持 cloud-init 的虛擬化系統(tǒng)創(chuàng)建虛擬機,可以直接通過 cloud-init 在虛擬機創(chuàng)建時設(shè)定私鑰。
        (進一步地,可以考慮使用 terraform/pulumi 直接自動化創(chuàng)建與配置虛擬機,相當(dāng)方便)
      1. 如果你的虛擬化系統(tǒng)(比如 VMware)不支持 cloud-init,可以考慮制作一個基礎(chǔ)的 ova 鏡像,把運維賬號(如 ops)和通用的公鑰打包在這個 ova 中,后續(xù)有需要再更換成更安全的密鑰對。

      2.2 為支持密碼登錄的遠(yuǎn)程主機批量設(shè)置免密登錄

      而對于已經(jīng)存在的、支持密碼登錄的一批遠(yuǎn)程主機,免密登錄的設(shè)置流程如下:

      首先你需要在本地通過 ssh-keygen 命令生成好公私鑰,默認(rèn)使用 rsa 算法。

      下一步是通過 ansible 來批量添加 ssh 公鑰到所有主機上:

      編寫一個名叫 add-sshkey.yml 的 playbook(playbook 將在后面詳細(xì)介紹):

      ---
      - hosts: all  # 使用 inventory 中的所有主機
        gather_facts: false
        remote_user: root  # 使用這個賬號登錄遠(yuǎn)程主機
      
        tasks:
        - name: install ssh key
          authorized_key:  # 查看該 module 的文檔:`ansible-doc authorized_key`
            user: root   # 給遠(yuǎn)程主機上的這個用戶添加公鑰。建議不要直接使用 root 賬號(可以用 ops)
            key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"  # 也可以使用 url,這樣公鑰可以直接放 nginx 上掛著,更方便。
            state: present
      

      然后用如下命令運行這個 playbook,輸入密碼,就能在所有遠(yuǎn)程主機上添加好 ssh 公鑰:

      # --inventory 指定主機清單,就用我們之前進行 ssh-keyscan 時用的那個文件就行
      # --ask-pass 可以讓我們交互式地輸入主機密碼(所有主機的密碼必須相同)
      ansible-playbook --inventory my-hosts --ask-pass ssh-addkey.yml 
      

      ansible 使用 /etc/ansible/hosts 文件作為它的默認(rèn) inventory 主機清單,但是我比較追求「基礎(chǔ)設(shè)施即代碼」,
      為了將這個 hosts 文檔和相關(guān)代碼/文檔放在一起,提交到 git 倉庫保存,我推薦每次都使用 -i [hosts_file] 的方式指定 inventory 主機清單。

      如果各主機的 ssh 端口、密碼等參數(shù)不一致,就需要在 my-hosts 中設(shè)定更詳細(xì)的參數(shù),詳見 Ansible Docs - intro_inventory

      3. 開始愉快地玩耍

      OK,現(xiàn)在免密登錄就配好了,可以愉快地用 Ansible 玩耍了。
      簡單地進行下測試:

      # ansible [pattern] -m [module] -u [remote user] -a "[module options]"
      # -u root     # 使用 root 賬戶登錄遠(yuǎn)程主機,這個對應(yīng)前面 playbook 中的 remote_user
      # all         # [pattern],all 表示選中 my-hosts 中的所有主機
      # -m [module] # 指定使用的 ansible 模塊,默認(rèn)使用 `command`,即在遠(yuǎn)程主機上執(zhí)行 -a 參數(shù)中的命令 
      # -a "ls -al"    # 指定 module 的參數(shù),這里是提供給 `command` 模塊的參數(shù)。
      ansible -u root -i my-hosts all -a "ls -al"
      
      # 或者使用 ansible-console 交互式執(zhí)行命令,更適合愉快地游玩hhh
      ansible-console -i my-hosts all -u root
      

      4. inventory 主機清單

      前面給出的 inventory 只是非常簡單的 IP 地址列表。
      可如果我們不同的主機有不同的 ssh 端口號、ssh 密鑰,或者不同的用戶等等,那這樣一個簡單的 IP 列表就不夠用了。

      為了解決這個問題,我們需要使用更高級的 inventory 語法,以對主機進行分類,對不同類別的主機配置不同的參數(shù)。

      ini 格式的配置舉例如下:

      # 給服務(wù)器分組,組名只能用 [a-zA-Z0-9_]
      [databases]
      # 指定一個數(shù)字范圍
      192.168.1.1[01:50]
      
      [k8s_cluster]
      # 指定一個字母表范圍
      worker[01:30].k8s.local
      worker-[a:h].k8s.local
      
      # k8s-cluster 組的公用參數(shù)
      [k8s_cluster:vars]
      ntp_server=ntp.svc.local
      proxy=proxy.svc.local
      
      [app]
      # 給服務(wù)器指定別名(git),通過關(guān)鍵字參數(shù)指定其他參數(shù)
      git ansible_host=git.svc.local ansible_port=225  ansible_ssh_private_key_file=<path/to/git-server-ssh>
      
      # 使用指定的賬號密碼(危險!)
      tester ansible_host=tester.svc.local ansible_user=root ansible_password=xxx
      

      另外也可以使用 yaml 格式配置 inventory 主機清單,上面的 ini 配置寫成 yaml 格式是這樣的:

      ---
      databases:
        hosts: 192.168.1.1[01:50]
      
      k8s_cluster:
        hosts: # 沒有別名的服務(wù)器
          worker[01:30].k8s.local:
          worker-[a:h].k8s.local:
        vars:  # 公共的參數(shù)
          ntp_server: ntp.svc.local
          proxy: proxy.svc.local
      app:
        hosts:
          git:  # 服務(wù)器別名
            ansible_host: git.svc.local  # 如果未定義這個,默認(rèn)以「別名」為 host。(在這里就是 git)
            ansible_port: 225
            ansible_ssh_private_key_file: <path/to/git-server-ssh>
          tester:
              ansible_host: tester.svc.local
              ansible_user: root
              ansible_password: xxx  # 危險!盡量不要寫明文密碼
      

      寫好配置后,可以通過如下命令驗證并查看你的配置:

      ansible-inventory -i xxx.yml --list --yaml
      

      該命令會提示出你錯誤的配置,并且打印出最終得到的 yaml 配置內(nèi)容。

      批量掃描主機指紋

      驗證通過后,就可以通過 ansible/ansible-playbook/ansible-console 愉快地玩耍了么?很遺憾的是——不行。

      我們在前面使用不帶任何參數(shù)的文檔作為 inventory 時,因為 ssh-keyscan 也能解析它,所以我們很方便地就完成了主機指紋的批量掃描。

      但是現(xiàn)在我們的 inventory 變得很復(fù)雜了,ssh-keyscan 解析不了它了,該如何去批量掃描主機指紋呢?難道幾十上百臺服務(wù)器的指紋,我必須得手動一個個去添加?!

      答案是可以批量加,最簡單有效的方法,是使用如下命令:

      # 使用環(huán)境變量 ANSIBLE_HOST_KEY_CHECKING 臨時關(guān)閉主機指紋檢查 
      ANSIBLE_HOST_KEY_CHECKING=false ansible -i inventory.yaml all -m ping
      

      經(jīng)測試,不論登錄成功與否,ping 模塊都會自動將所有主機的指紋添加到 known_hosts 中。
      但是在 ping 的文檔里沒有講到這個功能,這算是未定義行為。

      其他方法:

      1. 網(wǎng)上有很多文檔會教你修改 /etc/ansible/ansible.cfg 以關(guān)閉指紋的驗證,但是這是很危險的操作!你可能會連接到了黑客偽造的主機!
      2. 參考中有個問答,里面有人提供了一個 playbook 批量添加指紋,但是該方法不支持「主機別名」
        • 該 playbook 會將別名當(dāng)作 host 解析,根本不理會 ansible_host 參數(shù)。
        • 另外測試發(fā)現(xiàn)它用到了 ansbile 的 local 連接,而這種用法在 wsl1(ubuntu) 上無法使用,會報權(quán)限錯誤。。
      3. 自己寫個小腳本讀取 ansible-inventory -i xxx.yml --list 輸出的 json,將它轉(zhuǎn)換成 ssh-keyscan 可讀的文本。

      參考

      posted @ 2020-05-12 18:50  於清樂  閱讀(4134)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品国产中文字幕在线| 中文字幕国产精品资源| 先锋影音男人av资源| 亚洲欧美综合人成在线| 天天摸天天做天天爽水多| 成人久久精品国产亚洲av| 中文字幕av一区二区| 国产v亚洲v天堂a无码99| 亚洲丶国产丶欧美一区二区三区| 国产精品人妇一区二区三区| 欧美黑吊大战白妞| 人人做人人澡人人人爽| 国产一区二区三区精品片| 国产a网站| 九九成人免费视频| 国产精品无遮挡在线观看| 99热成人精品热久久66| 98精品全国免费观看视频| 精品午夜福利在线视在亚洲| 午夜福利理论片高清在线| 亚洲精品综合网在线8050影院| 亚洲中文字幕综合小综合| 激情综合网激情综合| 国产精品久久无码不卡黑寡妇| 精品综合一区二区三区四区| 野花香视频在线观看免费高清版| 精品少妇后入一区二区三区| 一区二区三区四区五区色| 亚洲精品中文字幕二区| 男女猛烈激情xx00免费视频| 九九热免费在线播放视频| 婷婷综合缴情亚洲| 蜜桃亚洲一区二区三区四| 亚洲区综合中文字幕日日| 天天做天天爱夜夜爽毛片| 国产成人午夜福利在线观看| 人妻av无码系列一区二区三区| 精品无码中文视频在线观看| 亚洲国产成人久久综合同性| 中文字幕国产日韩精品| 洛南县|