Скрипт оболочки для scp rpm на удаленный сервер и установить его. Требуется переменная для передачи имени удаленного хоста

Скрипт оболочки для scp rpm на удаленный сервер и установить его. Требуется переменная для передачи имени удаленного хоста

30.01.2020 03:59:34 Просмотров 28 Источник

Я пытаюсь написать своего рода сценарий меню, который достигнет следующего после выполнения:

  1. Спросите, какой пользователь / пароль вы используете для выполнения скрипта.
  2. Попросите удаленный сервер i. p., на который вы хотите передать файлы scp.
  3. Спросите каталог, в котором файлы хранятся локально.
  4. Спросите каталог, в который нужно перенести все файлы.
  5. Скопируйте все файлы.

Первое препятствие, которое у меня есть, - это сохранение пароля в качестве переменной в меню. Я думаю, что 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 для запуска.

Может ли кто - нибудь предложить какой-либо опыт работы с этим, чтобы помочь мне в построении сценария меню?

Спасибо!

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59977746/shell-script-to-scp-rpm-to-remote-server-and-install-it-needs-a-variable-to-pas#comment106071267_59977746
Я не совсем понимаю, что ты имеешь в виду... Я хочу, чтобы любой пользователь мог построить команду, используя ответы на ответы из меню в любой момент времени, и решил, что это лучший способ достичь этого, но когда вы говорите "попросить" для ввода, не могли бы вы объяснить, пожалуйста?
https://stackoverflow.com/questions/59977746/shell-script-to-scp-rpm-to-remote-server-and-install-it-needs-a-variable-to-pas#comment106071307_59977746
Если пользователь выбирает опцию A, вы спрашиваете у него имя пользователя и пароль. Если они выберут опцию B, вы запросите у них IP сервера. И так далее, верно?

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

Barmar

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/"
Является ответом!
Ivan

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

И вот у меня есть скрипт с похожей (но более богатой) функциональностью, пожалуйста, посмотрите.

https://stackoverflow.com/questions/59977746/shell-script-to-scp-rpm-to-remote-server-and-install-it-needs-a-variable-to-pas/59986686#comment106107609_59986686
Ух ты!! Большое спасибо. Это потрясающе :-)
Закрыть X