文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

通过堡垒主机进行 SSH

2024-04-05 00:12

关注

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,编程网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《通过堡垒主机进行 SSH》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我刚刚开始使用 go,我正在尝试通过堡垒主机设置 ssh 连接,我成功地通过了堡垒主机的身份验证,但在 lan 主机上失败了。我读过很多帖子,我发现这个答案非常有帮助。但我不确定那个人的配置中会有什么。我的代码如下。我试图只使用公钥,如果它很重要,我会在mac上启动,对linux进行身份验证,然后无法与另一个linux主机建立第二个连接。普通 ssh 工作正常

package main

import (
    "fmt"
    "golang.org/x/crypto/ssh"
    "io/ioutil"
    "log"
    "os/user"
)
const tcp  = "tcp"
const port = "22"

func bastionconnect(bastion string, localh string) *ssh.client {
    var usr, _ = user.current()
    var homedir = usr.homedir
    fmt.printf("home is %v\n", homedir)
    key, err := ioutil.readfile(homedir + "/.ssh/id_rsa")
    if err != nil {
        fmt.print("i'm dying at reading ssh key")
        panic(err)
    }

    signer, err := ssh.parseprivatekey(key)
    if err != nil {
        fmt.print("i'm dying at parsing private key")
        panic(err)
    }
    fmt.printf("i'm returning public keys for %v", signer.publickey())

    config := &ssh.clientconfig{
        user:              usr.username,
        hostkeycallback: ssh.insecureignorehostkey(),
        auth:              []ssh.authmethod{
            ssh.publickeys(signer),
        },
    }

    bclient, err := ssh.dial(tcp, bastion+":22", config)

    if err != nil {
        log.fatal(err)
    }
    fmt.print("passed bastion host\n")
    // dial a connection to the service host, from the bastion
    conn, err := bclient.dial(tcp, fmt.sprintf("%s:%s", localh, port))

    if err != nil {
        log.fatal(err)
    }
    ncc, chans, reqs, err := ssh.newclientconn(conn, fmt.sprintf("%s:%s", localh, port), config)
    if err != nil {
        fmt.printf("error trying to conntect to %s via bastion host\n%v\n", localh, err)
        log.fatal(err)
    }

    sclient := ssh.newclient(ncc, chans, reqs)

    return sclient
}

func main()  {
    var bastion = "jumpdev.example.org"
    var lanhost = "devserver01"
    bastionconnect(bastion, lanhost)
}

我看到的最后一条日志行是error试图通过堡垒主机连接到devserver01,错误为

2020/02/03 14:40:17 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey]

请原谅所有需要的 printfs 来查看发生了什么。 在第二次连接中,公钥配置是否会弄乱它?我也检查过这个项目,但似乎有点矫枉过正。


解决方案


上面的代码很好,我在一个我总是连接的盒子上遇到了 authorized_keys 问题,但忘记了我本地的 .ssh/config :(

我想对此进行一些扩展,所以这不仅仅是哎呀,我搞砸了帖子。对于 lanhost 代理连接的完整堡垒,我更新了 gist here

本篇关于《通过堡垒主机进行 SSH》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注编程网公众号!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯