Ssh

ssh-copy-id 與密碼在一行中,可能嗎?

  • September 12, 2013

我正在嘗試在 Ansible 中設置一個自動化腳本來設置新伺服器,並且我正在使用ssh-copy-id將 Ansible 主伺服器添加到新伺服器的授權 ssh 密鑰中。

我創建了一個使用 的腳本ssh-copy-id,但該命令要求輸入新伺服器的密碼。

是否可以在呼叫它的同一行中給它該密碼,以便我可以在腳本中自動化它?

是的,您可以使用expect進行循環

這是我用來在沒有已知 ssh 密鑰的情況下配置新 Debian 主機的方法。主機需要安裝pythonpython-apt安裝此劇本才能開箱即用。如果您想在虛擬機上測試它,您可以使用引導參數執行 Debian 安裝程序url=drybjed.github.io- 安裝程序將下載一個預置文件pythonpython-apt選擇包(以及其他)。安裝後,root賬號預設密碼為debian,首次登錄時強制修改。

安裝並首次登錄後:

  1. 確保您可以使用密碼 ssh 進入 root@host(接受主機指紋等)。
  2. 創建init.yml
hosts: all
 user: root
 sudo: no
 tags: init
 vars:
 - ssh_user: $ENV(USER)

 tasks:
 - name: INIT | Create admin system group
   group: name=admins system=yes state=present
   tags: init

 - name: INIT | Create admin account from current user
   user: name=$ssh_user state=present shell=/bin/bash groups=admins
   tags: init

 - name: INIT | Make sure essential software is installed
   apt: pkg=$item state=latest install_recommends=no
   with_items:
   - python
   - python-apt
   - sudo
   tags: init

 - name: INIT | Install ssh public key from current account
   authorized_key: user=$ssh_user key="$FILE(~/.ssh/id_rsa.pub)"
   tags: init

 - name: INIT | Install sudoers file for admin accounts
   lineinfile: "dest=/etc/sudoers.d/admins state=present create=yes regexp='^%admins' line='%admins ALL=(ALL:ALL) NOPASSWD: SETENV: ALL' owner=root group=root mode=0440"
   tags: init
  1. 執行 Ansible ansible-playbook -k -l host init.yml:. Ansible 將要求輸入 root 密碼,創建一個admins可以訪問 sudo 的系統組,根據您目前的使用者創建一個使用者帳戶,將您的帳戶複製~/.ssh/id_rsa.pub到您的新帳戶,然後將其添加到admins組中。

從現在開始,您可以使用 sudo 通過您的使用者帳戶使用 Ansible。

引用自:https://serverfault.com/questions/532517