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

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

Сообщение nezabudka » 19 сен 2015, 20:52

Нашла на гитхабе простенькую репу, форкнула, распарсила аргументы командной строки
и получила готовую прогу по выполнению комманд на удаленной машине по протоколу 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

220

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

221
Последний раз редактировалось 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
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 614
Фото: 180
Стаж: 3 года 6 месяцев 26 дней
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 147 раз.

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

Спонсор

Спонсор
 

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

Сообщение ALEXX » 19 сен 2015, 21:24

Щас исправим
Аватар пользователя
ALEXX
Администратор
Администратор
 
Сообщений: 1157
Фото: 35
Стаж: 3 года 10 месяцев 23 дня
Откуда: Королёв
Благодарил (а): 339 раз.
Поблагодарили: 187 раз.

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

Сообщение nezabudka » 19 сен 2015, 23:02

Заработала Галерейка. :)
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 614
Фото: 180
Стаж: 3 года 6 месяцев 26 дней
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 147 раз.

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
Последний раз редактировалось Шпак Дмитрий 20 сен 2015, 13:50, всего редактировалось 1 раз.
Шпак Дмитрий
Местный говорун
Местный говорун
 
Сообщений: 589
Стаж: 3 года 9 месяцев 25 дней
Откуда: Russian_federation, какой то
Благодарил (а): 20 раз.
Поблагодарили: 145 раз.

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

Сообщение nezabudka » 21 сен 2015, 17:18

Шпак Дмитрий писал(а):

а чем простой 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
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Автор темы
Сообщений: 614
Фото: 180
Стаж: 3 года 6 месяцев 26 дней
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 147 раз.


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

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron