无法在内部有其他命令的情况下运行命令



很抱歉,如果标题不是很不言自明,我正试图用ProxyCommand在一行中运行一个ssh命令:

ssh -i /home/myuser/.ssh/myprivatekey.pem ec2-user@i-00xxxxxxxxxx -o ProxyCommand="aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"

上面的这个命令有效,但是我需要在go中执行同样的操作。

func (s SSH) Tunnel() error {
parts := strings.Fields(`ssh -i /home/myuser/.ssh/myprivateksy.pem ec2-user@i-00xxxxxxxxxxx`)
parts = append(parts, `-o ProxyCommand="aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"`)
command := exec.Command(parts[0], parts[1:]...)
command.Stderr = os.Stderr
command.Stdout = os.Stdout
command.Stdin = os.Stdin
return command.Run()
}

然而,我得到了这个错误:

zsh:1: command not found: aws ssm start-session --target i-00Xxxxxxxxxxxx --document-name AWS-StartSSHSession --parameters 'portNumber=22'

我已尝试将其包含在strings.Fields:中

parts := strings.Fields(`ssh -i /home/myuser/.ssh/myprivateksy.pem ec2-user@i-00xxxxxxxxxxx -o ProxyCommand="aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"`)

然而,我有另一个错误:

zsh:1: unmatched " 

我怎样才能做到这一点?

感谢

根据您给出的shell输入,以下内容应该有效:

parts := strings.Fields(`ssh -i /home/myuser/.ssh/myprivateksy.pem ec2-user@i-00xxxxxxxxxxx -o`)
parts = append(parts, `ProxyCommand=aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'`)

这将把-o之后的部分作为一个不带引号的参数传递。外壳处理将删除这些引号。

最新更新