Я пытаюсь написать скрипт, который может скопировать файл с локального хоста на удаленный хост. И тогда я хочу выполнить этот скрипт с локального хоста. Но я не умею копировать. Я гуглил и нашел код ниже. Но, выполнив это, он запрашивает фразу-пароль. Даже если я нажму клавишу ввода или введу какое-либо значение или обработаю это в скрипте, я не смогу скопировать файл. Подскажите пожалуйста что может быть не так с этим скриптом?

#!/bin/bash
Node_ip="10.172.54.2"

IP=("$Node_ip")

in_ip=""

get_ip()  #Give the ip of current machine
{
        for i in `ifconfig | cut -d" " -f1 | sort | grep -v '^$'`
        do
        if [ $i = "eth0" ]
        then
                if ifconfig $i | grep addr: &> /dev/null
                then
                        in_ip="$(ifconfig $i | grep addr: | awk '{print $2}' | cut -d":" -f2)"
                        echo "IP is : $in_ip"
                fi
        fi
        done
}

SCP_PASSWORD="gauranga"

for ne in "${IP[@]}"
do
    get_ip      #in_ip now has ip of current shell
    expect -c "  
       spawn scp gaur@$in_ip:/home/gaur/work_automation/commands.sh root@$ne:/root/gauranga/
       expect yes/no { send yes; exp_continue }
       expect password: { send $SCP_PASSWORD}
       exit
    "
done

2 ответа2

2

Делая некоторые предположения здесь:

  • удаленный компьютер доступен с локального по IP 1.2.3.4
  • 1.2.3.4 имеет SSH и работает на открытом порту 22
  • Вы знаете пароль пользователя foobar на 1.2.3.4

Чтобы скопировать скрипт в домашний каталог foobar:

scp /path/to/script.sh foobar@1.2.3.4:~/

Добавление исполняемых прав доступа к сценарию и его запуск:

ssh foobar@1.2.3.4 "chmod +x ~/script.sh"

ssh foobar@1.2.3.4 "~/script.sh"

Если вам нужно делать это часто / автоматически, прочтите о настройке пар ключей SSH для входа без пароля. И НЕ храните свой пароль в виде открытого текста в скрипте, так как это представляет серьезную угрозу безопасности - ключи SSH были созданы именно для этой цели.

0

Вы забыли нажать "Enter" для отправки команд:

expect -c << END_EXPECT  
   spawn scp gaur@$in_ip:/home/gaur/work_automation/commands.sh root@$ne:/root/gauranga/
   expect { 
       yes/no { send "yes\r"; exp_continue }
       password: { send "$SCP_PASSWORD\r"}
   }
   expect eof
END_EXPECT

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .