在 Go 中,您可以通过直接修改 SSH 配置文件 /etc/ssh/ssh_config
来设置 StrictHostKeyChecking no
。不过,直接修改系统配置文件通常需要管理员权限,并且这样做会影响所有用户和所有 SSH 连接。
如果您只希望为特定的命令执行此设置,而不想更改全局配置,可以在调用 SSH 命令时使用 -o
选项指定该参数,如我之前提到的。不过,如果您确实希望编辑 /etc/ssh/ssh_config
文件,可以按照以下步骤进行。
方法一:直接在代码中修改配置文件
请注意,这个操作需要足够的权限(通常是 root 权限)。
package main
import (
"fmt"
"os"
"os/user"
)
func main() {
// 获取当前用户
currentUser, err := user.Current()
if err != nil {
fmt.Println("Error getting current user:", err)
return
}
// 打开 /etc/ssh/ssh_config 文件
file, err := os.OpenFile("/etc/ssh/ssh_config", os.O_RDWR|os.O_CREATE, 0644)
if err != nil {
fmt.Println("Error opening ssh_config file:", err)
return
}
defer file.Close()
// 写入 Host * 和 StrictHostKeyChecking no 设置
_, err = file.WriteString("\nHost *\n\tStrictHostKeyChecking no\n")
if err != nil {
fmt.Println("Error writing to ssh_config file:", err)
return
}
fmt.Printf("Successfully updated ssh_config by %s.\n", currentUser.Username)
}
方法二:使用环境变量或命令行选项
更推荐的方法是,在 Go 程序中使用 exec.Command
的方式设置 SSH 参数,而不是修改全局配置。如下所示:
package main
import (
"fmt"
"log"
"os/exec"
)
func main() {
// 定义要执行的 ssh 命令和参数,包括 StrictHostKeyChecking=no 设置
cmd := exec.Command("ssh", "-o", "StrictHostKeyChecking=no", "user@host", "your-command") // 替换为你的SSH用户、主机和命令
// 获取输出
output, err := cmd.CombinedOutput()
if err != nil {
log.Fatalf("Error executing command: %s, Output: %s", err, string(output))
}
// 打印结果
fmt.Println(string(output))
}
注意事项:
- 安全性:切勿在不信任的环境中关闭主机密钥检查,因为这可能导致中间人攻击。
- 权限问题:如果决定修改
/etc/ssh/ssh_config
,确保具有适当的权限,并理解此操作对系统安全性的影响。 - 多用户环境:如需考虑其他用户,请评估是否每个用户都应该有不同的配置。
根据您的需求选择合适的方法。如果您有进一步的问题或需求,请告诉我!
内容由零声教学AI助手提供,问题来源于学员提问