[PYTHON] Paramiko를 사용하여 한 번에 여러 개의 SSH 연결 만들기
PYTHONParamiko를 사용하여 한 번에 여러 개의 SSH 연결 만들기
아래 코드는 SSH를 통해 한 시스템에서 grep을 실행하고 결과를 인쇄합니다.
import sys, os, string
import paramiko
cmd = "grep -h 'king' /opt/data/horror_20100810*"
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.10.3.10', username='xy', password='xy')
stdin, stdout, stderr = ssh.exec_command(cmd)
stdin.write('xy\n')
stdin.flush()
print stdout.readlines()
한 번에 5 개의 머신을 grep 할 수있어서 (큰 지연이 없도록), 모든 것을 5 개의 변수에 넣고 모두 출력하는 것보다.
해결법
-
==============================
1.호출을 별도의 스레드 (또는 프로세스이지만 과부하가 될 것입니다)에 넣어야합니다. 코드가 함수에 있어야합니다 (어쨌든 좋은 아이디어입니다 : 모듈의 맨 위에는 실질적인 코드가 없습니다. 수평).
호출을 별도의 스레드 (또는 프로세스이지만 과부하가 될 것입니다)에 넣어야합니다. 코드가 함수에 있어야합니다 (어쨌든 좋은 아이디어입니다 : 모듈의 맨 위에는 실질적인 코드가 없습니다. 수평).
예 :
import sys, os, string, threading import paramiko cmd = "grep -h 'king' /opt/data/horror_20100810*" outlock = threading.Lock() def workon(host): ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(host, username='xy', password='xy') stdin, stdout, stderr = ssh.exec_command(cmd) stdin.write('xy\n') stdin.flush() with outlock: print stdout.readlines() def main(): hosts = ['10.10.3.10', '10.10.4.12', '10.10.2.15', ] # etc threads = [] for h in hosts: t = threading.Thread(target=workon, args=(h,)) t.start() threads.append(t) for t in threads: t.join() main()
5 개 이상의 호스트가있는 경우 "스레드 풀"아키텍처와 작업 단위 큐를 대신 사용하는 것이 좋습니다. 그러나 단 5 개만, "전용 스레드"모델을 고수하는 것이 더 간단합니다 (특히 표준 라이브러리에 스레드 풀이 없기 때문에 스레드 풀과 같은 타사 패키지가 필요합니다 ...) 또는 많은 미묘한 사용자 정의 물론 자신의 코드 ;-).
-
==============================
2.for 루프에서 모든 것을 실행하고 다음 반복으로 이동하기 전에 stdin을 닫는 것을 잊지 마십시오. 즉, stdin.flush () 라인 다음에 stdin.close () 라인을 추가합니다.
for 루프에서 모든 것을 실행하고 다음 반복으로 이동하기 전에 stdin을 닫는 것을 잊지 마십시오. 즉, stdin.flush () 라인 다음에 stdin.close () 라인을 추가합니다.
from https://stackoverflow.com/questions/3485428/creating-multiple-ssh-connections-at-a-time-using-paramiko by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 컨텍스트 관리자를 사용할 때 개체가 없음이됩니다. (0) | 2018.11.09 |
---|---|
[PYTHON] 파이썬을 사용하여 csv 파일을 SQL Server 데이터베이스에 작성하기 (0) | 2018.11.09 |
[PYTHON] Pandas 데이터 프레임에서 yes / no 열을 1/0으로 변경하는 간단한 방법이 있습니까? (0) | 2018.11.09 |
[PYTHON] SciPy 및 scikit-learn - ValueError : 치수 불일치 (0) | 2018.11.09 |
[PYTHON] Pandas / Python : 중복없이 두 개의 데이터 프레임을 연결하는 방법은 무엇입니까? (0) | 2018.11.09 |