Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

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

Ответить
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

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

Сообщение 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]
Последний раз редактировалось nezabudka 19 сен 2015, 23:04, всего редактировалось 4 раза.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
ALEXX
Администратор
Администратор
Сообщения: 1347
Зарегистрирован: 21 дек 2014, 14:59
Откуда: Королёв
Контактная информация:

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

Сообщение ALEXX »

Щас исправим
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

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

Сообщение nezabudka »

Заработала Галерейка. :)
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Шпак Дмитрий
Местный говорун
Местный говорун
Сообщения: 579
Зарегистрирован: 19 янв 2015, 15:56
Откуда: Russian_federation, какой то

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

Сообщение Шпак Дмитрий »

а чем простой 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
Последний раз редактировалось Шпак Дмитрий 20 сен 2015, 13:50, всего редактировалось 1 раз.
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

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

Сообщение nezabudka »

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

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

cat ~/text.txt | ssh user@server "cat >> copy_text.txt"
Я ей обычно ключи добавляю если нет ssh-copy-id
:)
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Ответить

Вернуться в «Другие языки»