Не удается скопировать файл с помощью скрипта с локального хоста на удаленный хост

640
Gauranga


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

#!/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 '' | cut -d":" -f2)" echo "IP is : $in_ip" fi fi done }  SCP_PASSWORD="gauranga"  for ne in "$" 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 
0
Я не знаю, если это проблема, но когда я scp файла, запрос пароля: «Пароль:»? FreudianSlip 9 лет назад 0
да, хотя я использую ожидание для пароля, я сталкиваюсь с проблемами Gauranga 9 лет назад 0

2 ответа на вопрос

2
Zaroth

Making some assumptions here:

  • remote machine is accessible from local one under IP 1.2.3.4
  • 1.2.3.4 has SSH up and running on open port 22
  • you know the password of user foobar on 1.2.3.4

To copy the script to foobar's home directory:

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

Adding executable permissions to the script and running it:

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

ssh foobar@1.2.3.4 "~/script.sh"

If you need to do this often/automatically, read up about setting up SSH keypairs for a passwordless login. And DO NOT store your password as plaintext in a script, as it presents a serious security risk - SSH keys were made just for this purpose.

0
glenn jackman

You're forgetting to "hit enter" for your send commands:

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 
Я сделал то, что вы сказали, но все же он просит пароль. Когда я нажимаю Enter, он выходит без передачи файла. Gauranga 9 лет назад 0
добавьте `exp_internal 1` после команды` spawn`, чтобы увидеть, что происходит. glenn jackman 9 лет назад 0

Похожие вопросы