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

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

我创build了一个使用ssh-copy-id的脚本,但该命令正在询问新服务器的密码。

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

是的,你可以用expect来做一个循环 。

以下是我用来configuration新的Debian主机而不知道ssh密钥的方法。 主机需要安装pythonpython-apt软件包才能工作。 如果你想在虚拟机上进行testing,你可以运行Debian安装程序,引导参数为url=drybjed.github.io – 安装程序将下载一个url=drybjed.github.io选定的pythonpython-apt软件包(等等)的文件。 安装完成后,root帐户的默认密码将是debian ,您将在首次login时被强制更改。

安装和首次login后:

  1. 确保您可以使用密码ssh进入root @主机(接受主机指纹等)。
  2. 创buildinit.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 ansible-playbook -k -l host init.yml 。 Ansible将要求inputroot密码,创build一个可以访问sudo的系统admins组,创build一个基于您当前用户的用户帐户,将您的~/.ssh/id_rsa.pub到您的新帐户,并将其添加到admins组。

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

你可以尝试一个肮脏的黑客攻击,但这只是一个肮脏的黑客。

在刚configuration的主机中使用公钥的正确方法是将该步骤添加到提供本身,即将其包括在您pressedkickstart或用于为您提供主机的自定义方法中。