Страница 1 из 1

Golang выполнение команд на удаленном сервере

Добавлено: 19 сен 2015, 20:52
nezabudka
Нашла на гитхабе простенькую репу, форкнула, распарсила аргументы командной строки
и получила готовую прогу по выполнению комманд на удаленной машине по протоколу ssh.
Для начала познакомим удаленный сервер со своим ключем, потому как авторизация проходит
автоматически, безпарольно.

Код: Выделить всё

ssh-copy-id -i ~/.ssh/id_rsa user@server.com
Установим нужный репозиторий

Код: Выделить всё

go get github.com/plutov/go/sshcmd # Что бы не тянуть сторонние бибилиотеки из этой репы
                                   # можете вставить форкнутую github.com/olecya/go/sshcmd
Напишем скрипт cmd_remote.go

Код: Выделить всё

package main
import (
	"github.com/olecya/go/sshcmd"
	"fmt"	
	"flag"
	"strings"
)
func main() {
	flag.Parse()
	var str []string
	str = strings.Split(flag.Arg(0), "@")
	fmt.Println(sshcmd.Run(str[0], str[1], strings.Join(flag.Args()[1:], " ")))
}
Скомпилируем его

Код: Выделить всё

go build cmd_remote.go
К стати уже скомпилированный скрипт можно запускать на системе без установленых golang и
хабовских дополнительных репозиториев. И скрипт можно назвать покороче например cmd.go и
закинуть его в директорию прописанную в переменной $PATH. Формат запуска программы такой

Код: Выделить всё

cmd user@server.com ps ax | grep sshd
Мы получим вывод команды запущенной на удаленной машине

Код: Выделить всё

ps ax | grep sshd
Давайте прочтем например таким же образом файл конфигурации на удаленной машине

Код: Выделить всё

cmd user@server.com cat /etc/resolv.conf
Скомпилированный код программы можно взять от сюда под именем cmd_remote без расширения .go
https://github.com/olecya/go

[album]220[/album]

Почему то в галерее не могу вставить изображение

[album]221[/album]

Re: Golang выполнение команд на удаленном сервере

Добавлено: 19 сен 2015, 21:24
ALEXX
Щас исправим

Re: Golang выполнение команд на удаленном сервере

Добавлено: 19 сен 2015, 23:02
nezabudka
Заработала Галерейка. :)

Re: Golang выполнение команд на удаленном сервере

Добавлено: 20 сен 2015, 13:48
Шпак Дмитрий
а чем простой ssh для выполнения команд на удалённой машине не подходит?

ДА же вот такое можно сделать, запуск локального скрипта на удалённой машине

Код: Выделить всё

$ ssh root@192.168.1.1 'bash -s' < local_script.sh
Или вот

Код: Выделить всё

$ ssh root@192.168.1.1 << EOF
uname -a
grep "model name" /proc/cpuinfo
grep MemTotal /proc/meminfo
EOF

Re: Golang выполнение команд на удаленном сервере

Добавлено: 21 сен 2015, 17:18
nezabudka
Шпак Дмитрий писал(а):а чем простой ssh для выполнения команд на удалённой машине не подходит?
Почему не подходит? Все подходит. Просто штурмую golang и цепляюсь за все что можно и интересно.
Вот такую вот например в bash-е приведу команду может кому пригодится

Код: Выделить всё

cat ~/text.txt | ssh user@server "cat >> copy_text.txt"
Я ей обычно ключи добавляю если нет ssh-copy-id
:)