Golang CLI에서 SSH를 사용하여 원격 명령을 실행하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-11 08:12:03
원래의
931명이 탐색했습니다.

How to Execute Remote Commands with SSH in a Golang CLI?

Golang CLI에서 SSH를 사용하여 원격 명령 실행

원격 시스템에서 명령을 실행하는 것은 시스템 관리를 자동화할 때 일반적인 작업입니다. Golang에서 "golang.org/x/crypto/ssh" 패키지는 SSH 연결을 설정하고 원격으로 명령을 실행하는 편리한 방법을 제공합니다.

원격 시스템에서 명령을 실행하려면 다음 단계를 따르세요.

  1. SSH 연결 설정:
    ssh.Dial 기능을 사용하여 SSH 연결을 설정합니다. 원격 시스템에 대한 SSH 연결. 다음 정보를 제공해야 합니다.

    • 사용자 이름
    • IP 주소 또는 호스트 이름
    • 포트(기본값은 22)
    • 인증 자격 증명( 키 또는 비밀번호)
  2. 생성 SSH 세션:
    연결이 설정되면 NewSession 기능을 사용하여 새 세션을 만듭니다. 세션은 특정 명령에 대한 연결을 나타냅니다.
  3. 입력 및 출력 구성:
    세션에 대한 표준 입력 및 출력 스트림을 구성할 수 있습니다. 예를 들어 출력을 bytes.Buffer로 리디렉션하여 명령 결과를 캡처할 수 있습니다.
  4. 명령 실행:
    session.Run 함수를 사용하여 원하는 명령을 실행할 수 있습니다. 원격 기계. 이 함수는 명령이 완료될 때까지 차단됩니다.

다음은 원격 명령을 실행하고 해당 출력을 반환하는 방법을 보여주는 예제 함수입니다.

import (
    "bytes"
    "net"

    "golang.org/x/crypto/ssh"
)

func remoteRun(user, addr, privateKey, cmd string) (string, error) {
    key, err := ssh.ParsePrivateKey([]byte(privateKey))
    if err != nil {
        return "", err
    }

    config := &ssh.ClientConfig{
        User: user,
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
        Auth: []ssh.AuthMethod{
            ssh.PublicKeys(key),
        },
    }

    client, err := ssh.Dial("tcp", net.JoinHostPort(addr, "22"), config)
    if err != nil {
        return "", err
    }

    session, err := client.NewSession()
    if err != nil {
        return "", err
    }
    defer session.Close()

    var b bytes.Buffer  // capture output
    session.Stdout = &b // get output

    err = session.Run(cmd)
    return b.String(), err
}
로그인 후 복사

이 함수는 다음과 같이 사용할 수 있습니다. 원격 시스템에서 명령을 실행하여 Golang CLI 스크립트에서 시스템 관리 작업을 자동화하는 편리한 방법을 제공합니다.

위 내용은 Golang CLI에서 SSH를 사용하여 원격 명령을 실행하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿