Скрипт оболочки для scp rpm на удаленный сервер и установить его. Требуется переменная для передачи имени удаленного хоста
Я пытаюсь написать своего рода сценарий меню, который достигнет следующего после выполнения:
- Спросите, какой пользователь / пароль вы используете для выполнения скрипта.
- Попросите удаленный сервер i. p., на который вы хотите передать файлы scp.
- Спросите каталог, в котором файлы хранятся локально.
- Спросите каталог, в который нужно перенести все файлы.
- Скопируйте все файлы.
Первое препятствие, которое у меня есть, - это сохранение пароля в качестве переменной в меню. Я думаю, что sshpass будет хорош для этого. Я хотел бы настроить меню следующим образом:
title="Select example"
prompt="Pick an option:"
options=("A" "B" "C")
echo "$title"
PS3="$prompt "
select opt in "${options[@]}" "Quit"; do
case "$REPLY" in
1 ) echo "You picked $opt which is option $REPLY";;
2 ) echo "You picked $opt which is option $REPLY";;
3 ) echo "You picked $opt which is option $REPLY";;
$(( ${#options[@]}+1 )) ) echo "Goodbye!"; break;;
*) echo "Invalid option. Try another one.";continue;;
esac
done
Но меню запросит у вас имя пользователя, локальный каталог файлов, i.p. удаленного сервера, каталог удаленного сервера, а затем выполнит команду scp, которую он построил.
Что-то вроде этого:
password="your password"
username="username"
Ip="<IP>"
sshpass -p "$password" scp /<PATH>/final.txt $username@$Ip:/root/<PATH>
Но я немного смущен тем, как я могу собрать все это вместе, чтобы меню собрало необходимую информацию, а затем выполнило собранные входные данные, чтобы оно просто создало команду scp для запуска.
Может ли кто - нибудь предложить какой-либо опыт работы с этим, чтобы помочь мне в построении сценария меню?
Спасибо!




Ответы - Скрипт оболочки для scp rpm на удаленный сервер и установить его. Требуется переменная для передачи имени удаленного хоста / Shell script to scp rpm to remote server and install it. Needs a variable to pass remote host name

30.01.2020 04:27:35
Вам не нужно меню, просто попросите каждый вход последовательно.
read -p "Username:" username
read -s -p "Password:" password
read -p "Server IP:" ip
read -p "Local directory:" local
read -p "Remote directory" remote
sshpass -p "$password" scp "/$local/final.txt" "$username@$ip:/root/$remote/"

30.01.2020 04:03:25
Если вам все еще нужно меню, Вот оно. Я немного изменил ваш скрипт, чтобы он строил / печатал команду scp, вводя значения одно за другим.
#!/bin/bash
title="Select example"
prompt="Pick an option:"
declare -A options # turn options to an associative array
options[1]='change user name'
options[2]='change user password'
options[3]='change remote host address'
options[4]='change path to source files'
options[5]='change destination path on remote server'
PS3="$prompt "
menu () { # wrap all this to a function to restart it after edition of an element
echo "$title"
select opt in "${options[@]}" "Quit"; do
case "$REPLY" in
1 ) read -p "${options[1]}: " user;;
2 ) read -sp "${options[2]}: " pass;; # read password with option -s to disable output
3 ) read -p "${options[3]}: " addr;;
4 ) read -p "${options[4]}: " from;;
5 ) read -p "${options[5]}: " dest;;
$(( ${#options[@]}+1 )) ) echo "Goodbye!" ; exit;;
*) echo "Invalid option. Try another one.";;
esac
clear # clear screen to remove inputs
printf "Creating scp command:\n"
# we don't want to show password, print *** if password set and 'password not set' if not
[[ $pass ]] && pass2='***' || pass2='[password not set]'
# text in [] will be printed if var is empty or not set, it's usefull to add default values to vars ${var:-default_value}
printf "sshpass -p $pass2 scp -r ${from:-[source not set]}/* ${user:-[user not set]}@${addr:-[host not set]}:${dest:-[destination not set]}/\n\n"
menu
done
}
clear # clear screen
menu # and start menu function
И вот у меня есть скрипт с похожей (но более богатой) функциональностью, пожалуйста, посмотрите.
