Julia调用addprocs报错ECONNREFUSED、SSH密钥无法访问如何解决
问题解决方案
核心原因排查与修复
1 修正sshflags参数格式(最可能触发该问题的原因)
Julia的addprocs方法中sshflags关键字参数要求传入字符串数组而非单个拼接的字符串,如果你传入带空格的整串,程序会将整个内容视为单个参数传递给SSH命令,导致SSH误将-i /home/luigal/.ssh/id_rsa整体识别为文件路径,自然提示文件不存在。
修改后的代码示例:
worker=[("myuser@ip:port",1)] addprocs(worker; sshflags=["-i", "/home/luigal/.ssh/id_rsa"], exename="/usr/local/bin/julia", tunnel=true, dir="/home/luigal/HGEpidemics-main/" )
2 校验SSH密钥权限
SSH对私钥文件的权限有严格要求,权限过高会被SSH主动拒绝读取,也会抛出类似不可访问的报错:
执行以下命令修正权限:
chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa
3 验证运行环境一致性
确认运行Julia程序的用户,和你验证文件存在的用户为同一用户:
- 执行
whoami查看当前运行Julia的用户名 - 执行
ls -l /home/luigal/.ssh/id_rsa确认私钥文件的所有者是否和当前用户一致,避免用sudo等身份切换运行Julia导致无法读取当前用户目录下的密钥
4 手动验证SSH连通性
先在终端手动执行SSH连接命令,排除SSH本身的连接问题:
ssh -i /home/luigal/.ssh/id_rsa -p 你的端口号 myuser@你的虚拟机IP
如果手动连接失败,先排查SSH配置、网络、虚拟机端口开放等基础问题,手动连接成功后再运行Julia代码。
5 进阶排查(可选)
如果以上步骤都无法解决,可以在sshflags中加入-v参数打印SSH详细调试日志,定位具体报错点:
sshflags=["-v", "-i", "/home/luigal/.ssh/id_rsa"]
运行程序后查看控制台输出的SSH日志,即可定位具体是哪一步触发的文件不可访问错误。
内容的提问来源于stack exchange,提问作者Luigi
相关产品推荐
相关产品推荐

