Czy istnieją istniejącą bibliotekę do wdrożenia interfejsu linii poleceń zdalnego?

Na przykład

Rozważmy przypadek gitolite, gdy wykonasz git push origin, będzie on w systemie zdalnego serwera i wykonanie niektórych kodu (mianowicie hooks, nie jest potrzebny serwer dla całej transakcji.

Co chcę archiwizować, jest coś takiego, np.

./remote get_up_time

Zostanie on wywołać ssh do zdalnego maszyny i wykonaj skrypt get_up_time już wdrożony

2
Ryan 10 sierpień 2012, 20:14

3 odpowiedzi

Najlepsza odpowiedź

Zakładając, że ssh jest zainstalowany i że klucz publiczny znajduje się na serwerze zdalnym (a więc nie musisz podawać hasła), byłoby to surowe wdrożenie:

#!/usr/bin/env ruby

host = ARGV.shift
command = ARGV.join(' ')
IO.popen("ssh #{host} \"#{command}\"") do |io|
  io.sync = true
  io.readlines.each { |line| puts line }
end

Użyteczne jak:

$ ./remote.rb www.example.com ls -l

Możesz rozwinąć to w razie potrzeby, aby zapewnić dodatkowe funkcje, takie jak odczyt z STDIN, aby zapewnić ssh hasło lub coś takiego.

Chociaż wydaje się, że istnieje "bez serwera", istnieje z pewnością sshd (zdalny serwer) w systemie zdalnym, który umożliwia to działanie.

Jeśli nie chcesz używać ssh, będziesz musiał użyć innego serwera działającego na urządzeniu zdalnym lub napisać własne.

0
davetron5000 12 sierpień 2012, 17:37

Dystrybucja standardowa Ruby zapewnia DRB AKA Ruby:

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/drb/rdoc/drb.html.

1
phoet 10 sierpień 2012, 20:37

Wdrażanie własnego skryptu byłoby wystarczająco łatwe.

#!/bin/bash

ssh root@example.com "$1"

Wtedy możesz po prostu zadzwonić jak:

./remote.sh get_up_time
1
D.A 11 sierpień 2012, 03:28