scp_upload.exp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. #!/usr/bin/expect -f
  2. set timeout 600
  3. # 使用当前目录,不再需要temp_dir参数
  4. set remote_user [lindex $argv 0]
  5. set remote_host [lindex $argv 1]
  6. set remote_dir [lindex $argv 2]
  7. set remote_pass [lindex $argv 3]
  8. # 创建远程目录
  9. spawn ssh $remote_user@$remote_host
  10. set connected 0
  11. set backend_success 0
  12. set frontend_success 0
  13. set nginx_config_success 0
  14. expect {
  15. "*yes/no*" {
  16. send "yes\r"
  17. exp_continue
  18. }
  19. "*password:*" {
  20. send "$remote_pass\r"
  21. expect {
  22. "*#*" {
  23. set connected 1
  24. puts "SSH连接成功"
  25. }
  26. timeout {
  27. puts "SSH连接失败"
  28. exit 1
  29. }
  30. }
  31. }
  32. timeout {
  33. puts "SSH连接超时"
  34. exit 1
  35. }
  36. }
  37. if {$connected} {
  38. # 创建远程目录
  39. puts "创建远程目录..."
  40. send "mkdir -p $remote_dir/backend $remote_dir/frontend/dist\r"
  41. expect "*#*"
  42. # 检查目录创建
  43. send "ls -la $remote_dir\r"
  44. expect "*#*"
  45. send "exit\r"
  46. expect eof
  47. }
  48. # 使用scp传输后端文件
  49. puts "传输后端文件..."
  50. spawn scp -r ./backend $remote_user@$remote_host:$remote_dir/
  51. set scp_connected 0
  52. expect {
  53. "*yes/no*" {
  54. send "yes\r"
  55. exp_continue
  56. }
  57. "*password:*" {
  58. send "$remote_pass\r"
  59. set scp_connected 1
  60. exp_continue
  61. }
  62. eof {
  63. if {$scp_connected} {
  64. puts "后端文件传输完成"
  65. set backend_success 1
  66. } else {
  67. puts "后端文件传输失败"
  68. }
  69. }
  70. timeout {
  71. puts "后端文件传输超时"
  72. }
  73. }
  74. # 使用scp传输前端文件
  75. puts "传输前端文件..."
  76. spawn scp -r ./frontend/dist $remote_user@$remote_host:$remote_dir/frontend/
  77. set scp_connected 0
  78. expect {
  79. "*yes/no*" {
  80. send "yes\r"
  81. exp_continue
  82. }
  83. "*password:*" {
  84. send "$remote_pass\r"
  85. set scp_connected 1
  86. exp_continue
  87. }
  88. eof {
  89. if {$scp_connected} {
  90. puts "前端文件传输完成"
  91. set frontend_success 1
  92. } else {
  93. puts "前端文件传输失败"
  94. }
  95. }
  96. timeout {
  97. puts "前端文件传输超时"
  98. }
  99. }
  100. # 使用scp传输nginx配置文件
  101. puts "传输nginx配置文件..."
  102. spawn scp ./nginx_config.conf $remote_user@$remote_host:/etc/nginx/sites-available/dzxj_dtu.conf
  103. set scp_connected 0
  104. expect {
  105. "*yes/no*" {
  106. send "yes\r"
  107. exp_continue
  108. }
  109. "*password:*" {
  110. send "$remote_pass\r"
  111. set scp_connected 1
  112. exp_continue
  113. }
  114. eof {
  115. if {$scp_connected} {
  116. puts "nginx配置文件传输完成"
  117. set nginx_config_success 1
  118. } else {
  119. puts "nginx配置文件传输失败"
  120. }
  121. }
  122. timeout {
  123. puts "nginx配置文件传输超时"
  124. }
  125. }
  126. # 验证传输结果
  127. puts "验证文件传输结果..."
  128. spawn ssh $remote_user@$remote_host
  129. expect {
  130. "*yes/no*" {
  131. send "yes\r"
  132. exp_continue
  133. }
  134. "*password:*" {
  135. send "$remote_pass\r"
  136. expect "*#*"
  137. }
  138. }
  139. # 详细检查后端文件数量和内容
  140. puts "详细检查后端文件..."
  141. send "find $remote_dir/backend -type f | wc -l\r"
  142. expect "*#*"
  143. send "ls -la $remote_dir/backend/\r"
  144. expect "*#*"
  145. # 详细检查前端文件数量和内容
  146. puts "详细检查前端文件..."
  147. send "find $remote_dir/frontend/dist -type f | wc -l\r"
  148. expect "*#*"
  149. send "ls -la $remote_dir/frontend/dist/\r"
  150. expect "*#*"
  151. # 确保网站目录权限正确
  152. puts "设置网站目录权限..."
  153. send "mkdir -p /var/www/html && cp -rf $remote_dir/frontend/dist/* /var/www/html/ && chown -R www-data:www-data /var/www/html/\r"
  154. expect "*#*"
  155. # 检查并确保nginx配置文件正确链接
  156. puts "检查nginx配置链接..."
  157. send "ln -sf /etc/nginx/sites-available/dzxj_dtu.conf /etc/nginx/sites-enabled/dzxj_dtu.conf && rm -f /etc/nginx/sites-enabled/default\r"
  158. expect "*#*"
  159. # 测试并重载nginx配置
  160. puts "重载nginx配置..."
  161. send "nginx -t && nginx -s reload\r"
  162. expect "*#*"
  163. send "exit\r"
  164. expect eof
  165. # 初始化状态变量为成功
  166. set backend_success 1
  167. set frontend_success 1
  168. set nginx_config_success 1
  169. # 返回成功结果
  170. exit 0