简体   繁体   中英

Using 'expect' command to pass password to SSH running script remotely

I need to create a bash script that will remotely run another script on a batch of machines. To do so I am passing a script through SSH.

ssh -p$port root@$ip 'bash -s' < /path/to/script/test.sh

I thought it would use my RSA keys but I am getting error:

"Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)"

I tried using sshpass to no avail. So my next solution was using expect. I have never used expect before and I'm positive my syntax is way off.

ssh -p$port root@$ip 'bash -s' < /path/to/script/test.sh
/usr/bin/expect <<EOD
expect "password"
send "$spass\n"
send "\n"
EOD

I have root access to all machines and ANY solution will do as long as the code remains within bash. Just keep in mind that this will be done in a loop with global variables ($spass, $ip, $port, etc) passed from a parent script.

You are doing it wrong in two means:

  1. If you want expect to interact with ssh , you need to start ssh from expect script and not before.

  2. If you put the script ( /path/to/script/test.sh ) to stdin of ssh , you can't communicate with the ssh process any more.

You should rather copy the script to remote host using scp and then run it.

Expect script might look like this:

/usr/bin/expect <<EOF
spawn ssh -p$port root@$ip
expect "password"
send "$Spass\r"
expect "$ "
send "/path/to/script/on/remote/server/test.sh\r"
expect "$ "
interact
EOF
    #!/usr/bin/expect
    #Replace with remote username and remote ipaddress
    spawn /usr/bin/ssh -o StrictHostKeyChecking=no username@IPAddress
    #Replace with remote username and remote ipaddress
    expect "username@IPAddress's password: "
    #Provide remote system password
    send "urpassword\n"
    #add commands to be executed. Also possible to execute bash scripts
    expect "$ " {send "pwd\n"} # bash command
    expect "$ " {send "cd mytest\n"}
    expect "$ " {send "./first.sh\n"} # bash scripts
    expect "$ " {send "exit\n"}
    interact

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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