Это мой ожидаемый сценарий для входа на удаленный сервер. Я прошу пользователя ввести пароль.
#!/usr/bin/expect -f
#Grabbing Password to be used in script further
stty -echo
send_user -- "Enter the Password: "
expect_user -re "(.*)\n"
send_user "\n"
stty echo
set pass $expect_out(1,string)
#Loggin into the Gateway as Normal user
#spawn ssh HOSTNAME@$ip
spawn -noecho ssh -o StrictHostKeyChecking=No HOSTNAME@$ip
expect "HOSTNAME@IP's password:"
send "$pass\n"
#Loggin in as root user
send "$ROOT\r"
expect -exact "Password:*"
send "$pass\r"
Теперь ниже мой сценарий bash для добавления пользователя.
#Script to Add User
read -p 'Please Enter The Username To Add: ' name
echo "$name" > /tmp/userlist.txt
clear
echo -e "Hello $name\nYour Name Is Added To The List."
userfile=/tmp/userlist.txt
username=$(cat /tmp/userlist.txt | tr 'A-Z' 'a-z')
for user in $username
do
useradd $user -N -s /bin/bash
usermod -aG sudo $user
passwd $user
Теперь происходит то, что ожидаемый сценарий, который я могу запустить с моей локальной машины, чтобы войти в систему на удаленной машине и делать такие вещи, как проверка использования оперативной памяти n all.
Но чтобы добавить пользователя, я хочу скопировать сценарий bash на удаленный компьютер, а затем запустить сценарий. МОЙ ВОПРОС: КАК Я МОГУ ИСПОЛЬЗОВАТЬ СЦЕНАРИЙ BASH, ЧТОБЫ Я ВСЕГДА ИСПОЛЬЗОВАЛ ОЖИДАНИЕ ДЛЯ ВХОДА В УДАЛЕННУЮ МАШИНУ И ЗАПУСКАТЬ СКРИПТЫ.
Все, что вам нужно сделать, это send
важные команды bash. Запросы ожидают:
set root_prompt {# $} ;# adjust as required
send_user "Please Enter The Username To Add: "
gets user
send -- "useradd $user -N -s /bin/bash\r"
expect -re $root_prompt
send -- "usermod -aG sudo $user\r"
expect -re $root_prompt
send -- "passwd $user\r"
expect -- {
password: {
send -- "$the_password\r"
exp_continue
}
-re $root_prompt
}
send -- "echo 'AllowUser $user' >> /etc/ssh/ssd_config\r"
expect -re $root_prompt
send -- "exit\r"
expect eor