Expect 脚本中的 scp 适用于少数文件,但不适用于许多文件
scp in Expect script works for few files but not for many files
我写了一个 bash 代码来将文件从我的远程笔记本电脑发送到服务器计算机。我使用 'scp' 命令并将其写在 bash 脚本上,以绕过每次 运行 时输入密码。
expect <<EOF
spawn scp -P 1111 -o StrictHostKeyChecking=no -r /Users/Desktop/sync_mac user@192.111.111.101:/home/folder
expect "password:"
send "11111\r"
expect eof
EOF
但是,问题是当我在终端上运行 bash 脚本时,它似乎工作正常但突然发送文件失败,没有任何警告迹象。(特别是对于发送文件数量多或文件体积大,数量少体积小的情况下没问题)
感谢您的帮助
前阵子我不得不这样做,但是对于多个服务器,其列表会每晚发生变化。我发现有时 scp 会要求首先将主机添加到您的已知主机列表中,或者我必须为其编写代码处理的其他消息。这可能会被埋在你的脚本中。
这是最终有效的摘录,如果有帮助的话:
expect -c "
spawn ssh-copy-id -i /x/home/$USER/.ssh/id_rsa.pub $USER@$HOST
expect {
\"password:\" {
send \"$PASS\n\"
expect {
\"expecting.\" { }
timeout {exit 1}
\"again.\" {exit 1}
}
}
\"yes/no)?\" {
send \"yes\n\"
expect \"password:\" {
send \"$PASS\n\"
expect {
\"expecting.\" { }
timeout {exit 1}
\"again.\" {exit 1}
}
}
}
}
expect
的默认超时为 10 秒,因此 expect eof
最多等待 10 秒,这对于您提到的许多文件来说可能不够。
要修复,您可以在 expect eof
之前 set timeout -1
或直接 expect -timeout -1 eof
。
我写了一个 bash 代码来将文件从我的远程笔记本电脑发送到服务器计算机。我使用 'scp' 命令并将其写在 bash 脚本上,以绕过每次 运行 时输入密码。
expect <<EOF
spawn scp -P 1111 -o StrictHostKeyChecking=no -r /Users/Desktop/sync_mac user@192.111.111.101:/home/folder
expect "password:"
send "11111\r"
expect eof
EOF
但是,问题是当我在终端上运行 bash 脚本时,它似乎工作正常但突然发送文件失败,没有任何警告迹象。(特别是对于发送文件数量多或文件体积大,数量少体积小的情况下没问题)
感谢您的帮助
前阵子我不得不这样做,但是对于多个服务器,其列表会每晚发生变化。我发现有时 scp 会要求首先将主机添加到您的已知主机列表中,或者我必须为其编写代码处理的其他消息。这可能会被埋在你的脚本中。
这是最终有效的摘录,如果有帮助的话:
expect -c "
spawn ssh-copy-id -i /x/home/$USER/.ssh/id_rsa.pub $USER@$HOST
expect {
\"password:\" {
send \"$PASS\n\"
expect {
\"expecting.\" { }
timeout {exit 1}
\"again.\" {exit 1}
}
}
\"yes/no)?\" {
send \"yes\n\"
expect \"password:\" {
send \"$PASS\n\"
expect {
\"expecting.\" { }
timeout {exit 1}
\"again.\" {exit 1}
}
}
}
}
expect
的默认超时为 10 秒,因此 expect eof
最多等待 10 秒,这对于您提到的许多文件来说可能不够。
要修复,您可以在 expect eof
之前 set timeout -1
或直接 expect -timeout -1 eof
。