当前位置: 首页 > 面试题库 >

使用SSH和带有golang的pem /密钥连接到服务器

樊令秋
2023-03-14
问题内容

我正在尝试使用Go编程语言的[ssh] [1]包通过密钥连接到Amazon AWS AWS
Linux服务器。但是,软件包文档有些含糊/令人困惑。有谁知道如何通过使用密钥的ssh进行连接,或者至少在可能的情况下?令我困扰的是[Dial]
[3]示例中的内容

// An SSH client is represented with a ClientConn. Currently only
// the "password" authentication method is supported.

我基本上想模仿ssh -i x.pem root@server.com的行为,并在服务器内部执行命令(例如whoami


问题答案:

您需要使用ssh.PublicKeys将列表ssh.Signers转换成ssh.AuthMethod。您可以使用从pem字节ssh.ParsePrivateKey获取a
Signer,或者如果需要使用rsa,dsa或ecdsa私钥,则可以将其提供给ssh.NewSignerFromKey

这也是一个在代理支持下充实的示例(因为使用代理通常是仅使用密钥文件之后的下一步)。

sock, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))
if err != nil {
    log.Fatal(err)
}

agent := agent.NewClient(sock)

signers, err := agent.Signers()
if err != nil {
    log.Fatal(err)
}

// or get the signer from your private key file directly
// signer, err := ssh.ParsePrivateKey(pemBytes)
// if err != nil {
//     log.Fatal(err)
// }

auths := []ssh.AuthMethod{ssh.PublicKeys(signers...)}

cfg := &ssh.ClientConfig{
    User: "username",
    Auth: auths,
}
cfg.SetDefaults()

client, err := ssh.Dial("tcp", "aws-hostname:22", cfg)
if err != nil {
    log.Fatal(err)
}

session, err = client.NewSession()
if err != nil {
    log.Fatal(err)
}

log.Println("we have a session!")

...


 类似资料:
  • 我想在静态编程语言中使用JSch通过SSH连接到我的OpenWRT路由器,带有SSL密钥。OpenWRT支持用ssh-keygen(https://openwrt.org/docs/guide-user/security/dropbear.public-key.auth)生成的密钥。 这将生成一个公共id_rsa。pub和private id_rsa密钥。OpenWRT接受这个id_rsa。酒吧我

  • 我有以下剧本:

  • 我试图编写一个YAML管道脚本,使用ssh密钥将已从bitbucket存储库更改的文件部署到远程服务器。我现在的文档是从bitbucket本身复制的,有错误: 配置错误 bitbucket-pipelines.yml在[pipelines>默认>0>步骤>脚本>1]处出现错误。准确地说:缺少命令字符串或命令字符串为空。此列表中的每个项应该是单个命令字符串或定义管道调用的映射。 我的ssh公钥和私钥

  • 在通常的场景中,连接字符串包含纯文本的密码,但这可以被Wireshark捕获,因此我想在一个连接字符串中使用加密的密码。我从Postgres文档中找到了以下摘录:

  • 我正在使用com.jcraft.jsch.jsch创建一个SFTP连接。 我的SSH密钥被设置为可以直接SSH到服务器,而不需要用户名或密码。 我的公钥在中的authorized_key文件中 我在本地计算机上的SSH密钥在 此外,我在此目录中还有一个配置文件和一个文件。 为了进行双重检查,我确保中的公钥在远程服务器的文件中。 我正在开发一个创建文件的GUI程序。有了这个文件,我希望能够将它存储在

  • 我使用三个ssh密钥访问GitHub、GitLab和BitBucket。但我不知道为什么我只能访问GitLab。我使用ssh-T进行测试。GitHub和Bitbucket都显示了这一点git@github.com:权限被拒绝(公钥)。我确信我已经为这些服务添加了密钥。 这是我的配置。ssh文件夹。请帮帮我。