使用plumberDeploy部署Plumber API至DigitalOcean遇SSH认证错误求助
使用plumberDeploy部署Plumber API至DigitalOcean的SSH认证错误
我尝试用plumberDeploy将Plumber API部署到DigitalOcean,始终遇到无法解决的错误。已重新生成SSH公私钥并在DigitalOcean后台完成配置,但问题仍未缓解。
执行以下代码时:
library(plumberDeploy) library(analogsea) mydrop <- plumberDeploy::do_provision(example = F)
得到错误输出:
THIS ACTION COSTS YOU MONEY! Provisioning a new server for which you will get a bill from DigitalOcean. Using default ssh keys: keyaccess NB: This costs $0.00893 / hour until you droplet_delete() it Waiting for create ................................ Error encountered : Error: libssh failure at 'connect': Timeout connecting to 137.184.90.246 Retrying attemps 1 in 3 seconds. New server key: 74:45:6a:ad:0e:1c:9f:de:ec:25:25:2b:fa:80:c5:cb:77:5f:25:3a Error encountered : Error: Authentication with ssh server failed Retrying attemps 2 in 9 seconds. Error encountered : Error: Authentication with ssh server failed Retrying attemps 3 in 27 seconds. Error encountered : Error: Authentication with ssh server failed
代码成功创建了Droplet,但后续组件安装未完成。即使针对已创建的Droplet执行测试部署代码:
plumberDeploy::do_deploy_api(483231642, "date", "docs/test/", 8000, docs = TRUE)
依然报错:
Error: Authentication with ssh server failed
我的session信息如下:
sessionInfo() R version 4.1.2 (2021-11-01) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 19045) Matrix products: default locale: [1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base loaded via a namespace (and not attached): [1] Rcpp_1.0.13 ssh_0.9.3 later_1.3.0 R6_2.5.1 [5] sys_3.4.1 jsonlite_1.8.4 magrittr_2.0.3 credentials_2.0.2 [9] httr_1.4.7 rlang_1.1.0 cli_3.6.1 curl_5.0.0 [13] rstudioapi_0.14 promises_1.2.0.1 tools_4.1.2 analogsea_1.0.7.2 [17] httpuv_1.6.5 yaml_2.3.7 compiler_4.1.2 plumberDeploy_0.2.2 [21] askpass_1.1 openssl_2.0.6
解决步骤
验证SSH密钥的可用性与权限
- 运行
credentials::ssh_key_info()查看R识别到的SSH密钥,确认keyaccess对应的密钥路径正确。 - Windows系统下,确保私钥文件(默认
C:\Users\<你的用户名>\.ssh\id_rsa)的权限为仅当前用户可读:右键文件→属性→安全→高级,禁用继承,仅添加当前用户并授予读取权限。
- 运行
手动测试SSH连接
- 打开PowerShell或Git Bash,执行
ssh root@<你的Droplet IP>,检查能否正常连接。如果出现主机密钥验证错误,执行ssh-keygen -R <你的Droplet IP>清除旧密钥后重试。 - 若手动连接失败,检查DigitalOcean后台是否将公钥正确添加到Droplet的SSH密钥列表,且创建Droplet时已选中该密钥。
- 打开PowerShell或Git Bash,执行
显式指定密钥路径执行部署
- 在
do_provision中直接指定密钥路径,避免依赖默认配置:mydrop <- plumberDeploy::do_provision( example = FALSE, ssh_keys = list("你的密钥名称" = "C:/Users/你的用户名/.ssh/id_rsa") )
- 在
排查网络与防火墙限制
- 确认本地Windows防火墙未阻止SSH出站连接(端口22),关闭VPN、代理等可能干扰网络的工具后重试。
- 检查DigitalOcean Droplet的防火墙规则,确保入站SSH流量(端口22)已被允许。
更新相关R包
- 你的
ssh包版本较旧,更新到最新版本:
同时更新install.packages("ssh")plumberDeploy和analogsea:install.packages(c("plumberDeploy", "analogsea"))
- 你的
内容的提问来源于stack exchange,提问作者Duck
相关产品推荐
相关产品推荐

