简体   繁体   English

使用Shell脚本提供密码

[英]Provide password using Shell script

I had setup my clients & server for passwordless login. 我已经设置了我的客户端和服务器以进行无密码登录。 Like passwordless login by copying RSA key of server to all client's /root/.ssh/id-rsa.pub. 通过将服务器的RSA密钥复制到所有客户端的/root/.ssh/id-rsa.pub来像无密码登录一样。 but this, I have done manually. 但这是我手动完成的。 I like to automate this process using shell script and providing password to the machines through script. 我喜欢使用shell脚本自动执行此过程,并通过脚本向计算机提供密码。 If this problem is solved then I also want to use rsync to automate push items to all servers. 如果这个问题解决了,那么我也想使用rsync自动将项目推送到所有服务器。 Can any body help me in this regard. 在这方面,谁能帮助我。

Thank you 谢谢

This script comes in Debian (and derivatives) machines, to distribute the keys. 该脚本来自Debian(和衍生产品)机器,用于分发密钥。 It's called ssh-copy-id. 它称为ssh-copy-id。 You'd use it like this: 您可以这样使用它:

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

Then you'd enter the password and the copying would be done. 然后,您输入密码即可完成复制。 You would do this one time only and then could use the rsync over ssh as usual. 您只需要这样做一次,然后可以像往常一样在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

如果您需要将更新/更改推送到网络中的多台计算机,那么您可能需要考虑查看像Puppet这样的东西,它们可以在正常渠道之外运行。

you could use expect to log into a remote machine when the .ssh/authorized_keys method is not avaliable. .ssh/authorized_keys方法不可用时,您可以使用Expect登录到远程计算机。 For example: 例如:

#!/usr/bin/expect

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM