2015-01-12 7 views
0

저는 아주 간단한 작업을합니다. ssh를 사용하여 내 로컬 컴퓨터의 트래픽을 원격 컴퓨터의 특정 포트로 전달하는 터널을 만들고 싶습니다. 내가 명령 줄에서이 작업을 수행 할 수 있습니다 다음순수한 Python을 사용하여 로컬 SSH 터널을 쉽게 만드는 방법

ssh -N -L 123:127.0.0.1:456 [email protected] 

은 내가 실행하는 경우 :

telnet localhost 123 

그것이 내가 관리했습니다 remotehost에 로그인

telnet 127.0.0.1 456 

를 실행하는 것과 동일입니다 이것은 라인을 따라 뭔가;

subprocess.Popen(['ssh', '-N', '-L', '%i:127.0.0.1:%i' % (new_port, old_port), ssh_user + '@' + ip_addr]) 

하지만 지금은 그만두고 파이썬 만 사용하십시오. 외부 프로세스가 필요 없습니다.

fabric.context_managers.remote_tunnel을 사용해 보았습니다.하지만 잘못 이해하지 않은 경우 로컬 장치가 아닌 원격 위치에서 시작하는 터널을 만들기위한 것입니다. 즉, 원격 시스템으로의 SSHing과 거기에서 SSH 터널을 만드는 것과 같습니다. 이것은 내 목적에 어리 석다. 원격 호스트를 실제로 로컬 시스템으로 설정할 수 있다고 생각하지만 비효율적이며 정직하게도이를 수행하는 방법조차 모릅니다.

나는 또한 forward.py on paramiko을 시도했으며 개인 키가 암호화되어 있기 때문에 작동하지 않습니다. 나는 그것을 처리하기 위해 스크립트를 수정하고, 필요에 따라 스크립트를 단순화하고 싶지만, 스크립트와 paramiko 라이브러리는 모두 힘들며 시작하는 방법을 모른다.

확실히 쉬운 방법이 있습니다. 나는 아직 너무 가까이서있는 것처럼 보인다.

+0

왜 Popen 또는 패브릭을 사용하지 않으시겠습니까? – Harman

답변

0

"순수 Python"은 무엇을 의미합니까? 서브 프로세스는 표준 파이썬 설치와 함께 번들로 제공됩니다.

하위 프로세스 및 패브릭은 이러한 작업을 위해 설계되었으므로 왜 그 작업에서 벗어나려고합니까?

보유하고있는 경우 최소한의 작업 만 원격으로 수행 할 수 있습니다. 예 : 메모리, 호스트 이름 등을 확인하십시오. suprocess를 계속 진행할 수 있습니다. 그러나 몇 가지 큰 요구 사항이 있다면, 나는 천으로가는 것이 좋습니다.

동일한 컴퓨터에서 작업해야하는 곳에서는 check_call 또는 Popen과 함께 하위 프로세스를 사용하지 않는 것이 좋습니다. 대안으로, 리눅스 명령이 이루는 것을 성취하기 위해 유닉스 코어에 들어갈 수 있도록 코드를 모두 바꿀 수 있습니다.