# #go
Вопрос:
Извините, если название не очень понятно, я пытаюсь запустить ssh
команду ProxyCommand
в одной строке:
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 "
Как я могу этого достичь?
Спасибо
Ответ №1:
Основываясь на введенных вами данных оболочки, должно работать следующее:
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
виде одного аргумента без кавычек. Обработка оболочки удалит эти кавычки.
Комментарии:
1. Да, это так, спасибо!