2012-10-03 29 views
5

Uzak bir makineye SSH oturumu başlatmanın, Conch kullanarak Twisted içinden port yönlendirme seçeneklerine sahip bir örneği var mı?SSH portunu Python Twisted içinden nasıl gönderebilirim?

Senaryo:

Bir sunucu yüklü bir Twisted tabanlı RPC istemcisi ile özel Twisted tabanlı Protobuf UPÇ servisi ve makineyi çalıştıran var. Sunucu ayrıca SSH kullanıyor. Sunucudaki RPC hizmetiyle doğrudan konuşmak yerine, RPC istemcisinden SSH kullanarak sunucuya bağlanmak, sunucuda kurulum bağlantı noktası iletmek ve SSH tüneli üzerinden Protobuf kullanarak RPC hizmetiyle iletişim kurmak istiyorum.

Bağlantı noktası iletmeyi manuel olarak yapılandırabilir ve RPC istemcisinin RPC istemcisini istemci kutusundaki yerel bir bağlantı noktasına işaret ederek RPC hizmetiyle konuşmasını sağlayabiliyorum, bunu nasıl yapabileceğimi merak ediyorum. doğrudan müşteri içinde.

cevap

4

Eğer Conch ile düzgün şeyler yapmak için Twisted içinde geliştirilmiş belgeler olsaydı harika olurdu (sonuçta, diğer programlanabilir SSH kütüphaneleri kaç tane var?). O güne kadar, conch komut satırı aracının uygulanmasının okunması büyük bir yardım olabilir.

komut satırından port yönlendirme seçenekleri SSH bağlantısı üzerinden bazı eylem haline getiriliyor İşte

görebildiğimiz:

http://twistedmatrix.com/trac/browser/trunk/twisted/conch/scripts/conch.py#L188

Ben yerel bir yönlendirme kural hakkında soruyorsun düşünüyorum, bu yüzden localForwards döngü yapmak istediğiniz şeyi kabaca yapıyor.

+0

Teşekkürler Jean-Paul! – Bryan

4

Tünel oluşturma Yerel bağlantı noktası yönlendirme yapan bir Bükülü SSH istemcisi şaşırtıcı derecede basit olabilir.

Sadece basic Twisted Conch SSH client oluşturmak ve liman yönlendirme kısmını uygulamaya müşterinizin SSH bağlantısı sınıfının yöntemini serviceStarted:

(RemoteHost ssh işaret olarak ayarlanır boyutu da var hepsi bu
from twisted.conch.ssh import forwarding 

LOCALPORT = 8888 
REMOTEHOST = "127.0.0.1" 
REMOTEPORT = 9999 

class Connection(connection.SSHConnection): 

    def serviceStarted(self): 
     Channel = forwarding.SSHListenClientForwardingChannel 
     Factory = forwarding.SSHListenForwardingFactory 
     factory = Factory(self, (REMOTEHOST, REMOTEPORT), Channel) 
     s = reactor.listenTCP(LOCALPORT, factory) 

sunucu kendisi bağlandığınızı söylediğinden bu yana).

İlgili konular