我正在尝试在 Ansible 中设置一个自动脚本来设置新服务器,并且我正在使用ssh-copy-id
它将 Ansible 主服务器添加到新服务器的授权 ssh 密钥中。
我创建了一个使用的脚本ssh-copy-id
,但该命令要求输入新服务器的密码。
是否可以在调用它的同一行中输入该密码,以便我可以在脚本中自动执行它?
答案1
答案2
这是我在没有已知 ssh 密钥的情况下配置新 Debian 主机的方法。主机需要安装python
和python-apt
软件包,此剧本才能开箱即用。如果您想在虚拟机上测试它,可以使用启动参数运行 Debian 安装程序url=drybjed.github.io
- 安装程序将下载一个预置文件,其中包含所选的python
和python-apt
软件包(以及其他)。安装后,root 帐户的默认密码将为debian
,您将被迫在首次登录时更改它。
安装并首次登录后:
- 确保您可以使用密码 (接受主机指纹等) 通过 ssh 进入 root@host。
创造
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
使用以下命令运行 Ansible:
ansible-playbook -k -l host init.yml
。Ansible 将要求输入 root 密码,创建admins
具有 sudo 访问权限的系统组,根据当前用户创建用户帐户,将您的复制~/.ssh/id_rsa.pub
到新帐户,然后将其添加到admins
组中。
从现在开始,您可以使用 sudo 通过您的用户帐户使用 Ansible。
答案3
您可以尝试使用 进行肮脏的黑客攻击expect
,但它只是一种肮脏的黑客攻击。
在刚刚配置的主机中拥有公钥的正确方法是将该步骤添加到配置本身中,即将其包含在您用于配置主机的或自定义方法中pressed
。kickstart