代码之家  ›  专栏  ›  技术社区  ›  Ankit Singh

使用shell脚本提供密码

  •  0
  • Ankit Singh  · 技术社区  · 16 年前

    我已经为无密码登录设置了客户机和服务器。 通过将服务器的rsa密钥复制到所有客户机的/root/.ssh/id-rsa.pub,类似于无密码登录。但这,我已经手动完成了。我喜欢使用shell脚本自动化这个过程,并通过脚本为机器提供密码。 如果这个问题得到解决,那么我还想使用rsync自动将项目推送到所有服务器。 在这方面,任何人都能帮助我吗?

    谢谢你

    3 回复  |  直到 16 年前
        1
  •  2
  •   Vinko Vrsalovic    16 年前

    这个脚本包含在Debian(和派生)机器中,用于分发密钥。它叫做ssh-copy-id。您可以这样使用它:

    ssh-copy-id [-i identity_file] [user@]machine
    

    然后输入密码,复制就完成了。您只能这样做一次,然后可以像往常一样通过ssh使用rsync。

    #!/bin/sh
    
    # Shell script to install your identity.pub on a remote machine
    # Takes the remote machine name as an argument.
    # Obviously, the remote machine must accept password authentication,
    # or one of the other keys in your ssh-agent, for this to work.
    
    ID_FILE="${HOME}/.ssh/identity.pub"
    
    if [ "-i" = "$1" ]; then
      shift
      # check if we have 2 parameters left, if so the first is the new ID file
      if [ -n "$2" ]; then
        if expr "$1" : ".*\.pub" ; then
          ID_FILE="$1"
        else
          ID_FILE="$1.pub"
        fi
        shift         # and this should leave $1 as the target name
      fi
    else
      if [ x$SSH_AUTH_SOCK != x ] ; then
        GET_ID="$GET_ID ssh-add -L"
      fi
    fi
    
    if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ] ; then
      GET_ID="cat ${ID_FILE}"
    fi
    
    if [ -z "`eval $GET_ID`" ]; then
      echo "$0: ERROR: No identities found" >&2
      exit 1
    fi
    
    if [ "$#" -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
      echo "Usage: $0 [-i [identity_file]] [user@]machine" >&2
      exit 1
    fi
    
    { eval "$GET_ID" ; } | ssh $1 "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1
    
    cat <<EOF
    Now try logging into the machine, with "ssh '$1'", and check in:
    
      .ssh/authorized_keys
    
    to make sure we haven't added extra keys that you weren't expecting.
    
    EOF
    
        2
  •  0
  •   Ignacio Vazquez-Abrams    16 年前

    如果您需要将更新/更改推送到网络中的多台计算机,那么您可能需要考虑查看 Puppet 在正常通道之外工作。

        3
  •  0
  •   dsm    16 年前

    您可以使用Expect登录到远程计算机, .ssh/authorized_keys 方法不可用。例如:

    #!/usr/bin/expect
    
    spawn   ssh user@remote-host
    expect  "*password: $"
    send    "YOUR PASSWORD HERE\n"
    send    "bash\n"
    interact