Golang SSH源端口
我需要使用静态源端口。我们将基于此源端口执行IPTables重定向规则。因此,静态源端口用作标识符,因为多个连接挂起到服务器上的同一目标端口。把穷人的TCP多路复用看作是一个laGolang SSH源端口,go,ssh,proxy,openssh,netcat,Go,Ssh,Proxy,Openssh,Netcat,我需要使用静态源端口。我们将基于此源端口执行IPTables重定向规则。因此,静态源端口用作标识符,因为多个连接挂起到服务器上的同一目标端口。把穷人的TCP多路复用看作是一个laiptables 我遵循了Golang示例并拼凑了一些混乱的代码。我不是程序员 ssh.dial函数处理了很多问题,当您使用net.dial以及ssh.NewClientConn、ssh.NewClient和ssh.NewSession时,这一点就显而易见了 我发现OpenSSH配置选项中没有类似的ProxyComman
iptables
我遵循了Golang示例并拼凑了一些混乱的代码。我不是程序员
ssh.dial
函数处理了很多问题,当您使用net.dial
以及ssh.NewClientConn
、ssh.NewClient
和ssh.NewSession
时,这一点就显而易见了
我发现OpenSSH配置选项中没有类似的ProxyCommand
。我使用的是:
ssh -o ProxyCommand="ncat --source-port %h %p" ...
以实现Bash脚本中的需求
另外,我为一个加载的问题道歉,但是ncat
等。请允许我立即重用源端口。
而Golang SSH在Arch Linux上会留出等待时间0 0 192.168.99.53:31337 192.168.99.7:22
60秒。
显然,随后绑定到所述源端口会导致错误
请输入以下代码:
- 我省略了
功能示例hostkeycheck
- 我知道
是一个拙劣的尝试sClient.Listen
- 服务器上未显示远程端口转发
- 我假设现在需要更多的代码来处理通道等
- shell命令不起作用,文件显示在
/tmp/
谢谢。你好,罗伯特,你看到了吗?“这会有帮助吗?”布莱克格林:我以前读过那篇文章。不是我要找的,谢谢。嗨,罗伯特,你看到了吗?“这会有帮助吗?”布莱克格林:我以前读过那篇文章。不是我想要的,谢谢。
package main
import (
"bytes"
"log"
"net"
"os"
"bufio"
"strings"
"path/filepath"
"golang.org/x/crypto/ssh"
)
func main() {
hostKey, err := ExampleHostKeyCheck()
conf := &ssh.ClientConfig{
User: "robert",
Auth: []ssh.AuthMethod{
ssh.Password("password"),
},
HostKeyCallback: ssh.FixedHostKey(hostKey),
}
server, _ := net.ResolveTCPAddr("tcp", "centos7.ephemeric.local:22")
client, _ := net.ResolveTCPAddr("tcp", ":31337")
cc, err := net.DialTCP("tcp", client, server)
//cc, err := net.DialTCP("tcp", nil, server)
if err != nil {
log.Fatalf("%s", err)
}
defer cc.Close()
conn, chans, reqs, err := ssh.NewClientConn(cc, "", conf)
if err != nil {
log.Fatalf("%s", err)
}
defer conn.Close()
// https://stackoverflow.com/questions/35906991/go-x-crypto-ssh-how-to-establish-ssh-connection-to-private-instance-over-a-ba
sClient := ssh.NewClient(conn, chans, reqs)
if err != nil {
log.Fatalf("%s", err)
}
defer sClient.Close()
session, err := sClient.NewSession()
if err != nil {
log.Fatalf("%s", err)
}
defer session.Close()
sListen, err := sClient.Listen("tcp", "127.0.0.1:31337")
if err != nil {
log.Fatal("unable to register tcp forward: ", err)
}
defer sListen.Close()
var b bytes.Buffer // import "bytes"
session.Stdout = &b // get output
// You can also pass what gets input to the stdin, allowing you to pipe content from client to server session.Stdin = bytes.NewBufferString("MyInput").
err = session.Run("echo slobwashere >>/tmp/slobwashere; ls")
}