Go x/crypto/ssh를 사용하여 Bastion Node를 통해 개인 인스턴스에 대한 SSH 연결 설정
개요:
이 가이드는 다음을 사용하여 배스천 노드를 통해 프라이빗 인스턴스에 SSH 연결을 설정하는 방법을 보여줍니다. Go의 x/crypto/ssh 라이브러리.
시나리오:
퍼블릭 및 프라이빗 서브넷이 있는 AWS VPC를 고려해보세요. "배스천" 인스턴스는 퍼블릭 서브넷에 배포되고 "서비스 인스턴스"는 프라이빗 서브넷에서 실행됩니다.
목표:
"서비스 인스턴스에 연결 " "요새"를 통해 로컬 노트북에서 명령을 실행하고 업로드합니다. 파일.
해결책:
1. 요새 연결 설정:
ssh.Dial 기능을 사용하여 요새 호스트에 연결합니다:
bClient, err := ssh.Dial("tcp", bastionAddr, config) if err != nil { log.Fatal(err) }
2. 서비스 연결 다이얼링:
배스천 클라이언트의 Dial 메소드를 사용하여 서비스 호스트에 대한 연결 설정:
conn, err := bClient.Dial("tcp", serviceAddr) if err != nil { log.Fatal(err) }
3. 서비스 클라이언트 생성:
설정된 연결을 사용하여 새 ssh.ClientConn 및 ssh.Client를 생성합니다:
ncc, chans, reqs, err := ssh.NewClientConn(conn, serviceAddr, config) if err != nil { log.Fatal(err) } sClient := ssh.NewClient(ncc, chans, reqs)
4. 서비스 클라이언트 사용:
이제 생성된 sClient를 사용하여 명령을 실행하고 파일을 전송할 수 있습니다.
// Run a command on the service instance cmd := sClient.Run("ls -l") output, err := cmd.Output() if err != nil { log.Fatal(err) } fmt.Printf("Output: %s", output) // Upload a file to the service instance f, err := os.Open("./local_file.txt") if err != nil { log.Fatal(err) } defer f.Close() w, err := sClient.NewWriter("service_file.txt") if err != nil { log.Fatal(err) } defer w.Close() if _, err := io.Copy(w, f); err != nil { log.Fatal(err) }
위 내용은 Go의 x/crypto/ssh를 사용하여 Bastion 호스트를 통해 개인 인스턴스에 SSH로 연결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!