Как вызвать переменные, которые были переданы во время выполнения другому скрипту bash? - PullRequest
0 голосов
/ 29 ноября 2018

Bash Script 1:

Запрашивает имя пользователя и имя хоста и сохраняет их в другую переменную.

#!/bin/bash

echo "Please enter hostname:"
read hostname

echo -n "Enter the username"
read username

echo -n "enter the password:"
read -s password

: '(Я хочу использовать команду spawn перед ssh, следовательно, у меня естьнаписал другой скрипт с ожидаемым в качестве интерпретатора. Я хочу передать детали, введенные пользователем, скрипту 2) '
Bash script 2:

#!/bin/expect

spawn ssh -o StrictHostKeyChecking=no $username\@$hostname

expect {
         timeout
                { send_user "\nTimeout Exceeded - Check Host\n"; exit 1 }
         eof
                { send_user "\nSSH Connection To $hostname Failed\n"; exit 1 }
        incorrect
                {send_user "invalid password or account\n"; exit 1}

        "*assword:"
                { send "$password\n" }
expect "$"
interact
        }

:' (но как вызвать информацию, запрашиваемуюсценарий 1 во время выполнения сценария 2?) '

1 Ответ

0 голосов
/ 29 ноября 2018

Ваш bash-скрипт будет вызывать ожидаемый сценарий следующим образом:

expect script.exp "$username" "$password" "$hostname"

И ожидаемый сценарий будет запускаться следующим образом:

#!/bin/expect

lassign $argv username password hostname

# or if your version of expect is old and does not have "lassign"
# foreach {username password hostname} $argv break

# or, if you prefer
# set username [lindex $argv 0]
# set password [lindex $argv 1]
# set hostname [lindex $argv 2]

spawn ssh -o StrictHostKeyChecking=no $username@$hostname
# etc etc

Символ @ не имеет специального значения,таким образом, он не нуждается в экранировании.


При вышеупомянутом подходе существует угроза безопасности: во время работы ожидаемого кода на выходе ps будет показан пароль.

Youможет поделиться паролем через окружение:

bash

export username password hostname
expect script.exp

Ожидается

spawn ssh -o StrictHostKeyChecking=no $env(username)@$env(hostname)
# etc etc
...