Gradle-SSH-Plugin Kotlin配置:自定义knownHosts路径失效问题
解决gradle-ssh-plugin自定义knownHosts路径不生效的问题
在Kotlin DSL(build.gradle.kts)中配置gradle-ssh-plugin时,你之前的写法存在关键问题:在delegateClosureOf闭包内返回mapOf并不会实际设置插件的配置属性,而是需要直接对闭包内的配置对象赋值。
以下是两种正确的配置方式,可实现将knownHosts指向Git仓库内的自定义文件:
方式一:全局配置ssh设置
tasks.create("deploy") { val myServer = Remote( mapOf( "host" to "192.168.1.1", "user" to "username", "password" to "password" ) ) // 全局配置knownHosts路径 ssh.settings { knownHosts = project.rootDir.resolve("path/to/your/known_hosts").absoluteFile } doLast { ssh.run { session(myServer) { put(from = project.rootDir.resolve("deploy"), into = "/home/username/") } } } }
方式二:在run块内配置单次会话的settings
tasks.create("deploy") { val myServer = Remote( mapOf( "host" to "192.168.1.1", "user" to "username", "password" to "password" ) ) doLast { ssh.run { // 针对本次run配置knownHosts settings { knownHosts = project.file("path/to/your/known_hosts").absoluteFile } session(myServer) { put(from = project.rootDir.resolve("deploy"), into = "/home/username/") } } } }
关键注意事项
- 替换
path/to/your/known_hosts为仓库内实际的文件路径,确保文件存在且权限正确(建议权限为644) - 使用
project.rootDir.resolve()或project.file()可以确保路径基于项目根目录,避免相对路径的歧义 - 如果需要跳过主机密钥验证(仅测试环境使用),可以设置
knownHosts = AllowAnyHosts.instance,但生产环境不建议这么做
内容的提问来源于stack exchange,提问作者aminator
相关产品推荐
相关产品推荐

