无法通过脚本将文件从本地主机复制到远程主机

无法通过脚本将文件从本地主机复制到远程主机


我正在尝试编写一个脚本,可以将文件从本地主机复制到远程主机。然后我想从本地主机执行该脚本。但我无法复制。我在 Google 上搜索并找到了以下代码。但在执行该代码时,它会要求输入密码。即使我按 Enter 键或输入一些值或在脚本中处理它,我也无法复制该文件。请指出这个脚本可能有什么问题?

#!/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

答案1

这里做一些假设:

  • 可以通过 IP 访问本地计算机的远程计算机1.2.3.4
  • 1.2.3.4SSH 在开放端口 22 上启动并运行
  • foobar您知道用户的密码1.2.3.4

将脚本复制到 foobar 的主目录:

scp /path/to/script.sh [email protected]:~/

给脚本添加可执行权限并运行:

ssh [email protected] "chmod +x ~/script.sh"

ssh [email protected] "~/script.sh"

如果你需要经常/自动执行此操作,请阅读设置 SSH 密钥对以实现无密码登录. 并且不要将你的密码以纯文本形式存储在脚本中,因为这会带来严重的安全风险 - SSH 密钥就是为此目的而制作的。

答案2

您忘记在发送命令时“按回车键”了:

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

相关内容