ssh-copy-id 与密码在一行中,可以吗?

ssh-copy-id 与密码在一行中,可以吗?

我正在尝试在 Ansible 中设置一个自动脚本来设置新服务器,并且我正在使用ssh-copy-id它将 Ansible 主服务器添加到新服务器的授权 ssh 密钥中。

我创建了一个使用的脚本ssh-copy-id,但该命令要求输入新服务器的密码。

是否可以在调用它的同一行中输入该密码,以便我可以在脚本中自动执行它?

答案1

是的,你可以用环形使用预计

答案2

这是我在没有已知 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
    
  3. 使用以下命令运行 Ansible:ansible-playbook -k -l host init.yml。Ansible 将要求输入 root 密码,创建admins具有 sudo 访问权限的系统组,根据当前用户创建用户帐户,将您的复制~/.ssh/id_rsa.pub到新帐户,然后将其添加到admins组中。

从现在开始,您可以使用 sudo 通过您的用户帐户使用 Ansible。

答案3

您可以尝试使用 进行肮脏的黑客攻击expect,但它只是一种肮脏的黑客攻击。

在刚刚配置的主机中拥有公钥的正确方法是将该步骤添加到配置本身中,即将其包含在您用于配置主机的或自定义方法中pressedkickstart

相关内容