파이썬을 사용하여 SSH를 통해 다른 서버에 연결하고, 소수의 명령을 실행하고 각 명령의 결과를 각기 다른 변수에 할당해야합니다.
가장 간단한 방법은 무엇입니까?
나는 SSHController을 시도했지만, 나는 프롬프트와 함께 뭔가를 망쳤으며, 스크립트는 끝없이 그것을 기다리고있다.
모든 사례에 대해 매우 감사하겠습니다.파이썬에서 SSH 사용하기
답변
파이썬에서 SSH를 사용하는 방법에는 여러 가지가 있습니다. 일반적인 접근법은 다음 pexpect 또는 유사한 PTY (사이비-TTY를 사용 ssh
로컬 이진 제어
- 통화 로컬
ssh
이진) 프로세스 제어 메커니즘 (자동화 된 방식으로 터미널 세션에서 프로세스 생성 및 상호 작용을 위해) - Paramiko 또는 Twisted conch과 같은 Python 모듈/라이브러리를 사용하면 SSH 프로토콜을 구현합니다 (직접 기본 Python으로 제공하거나 기본 공유 라이브러리에 대한 바인딩 .so 또는 DLL).
SSHController는이 두 번째 범주에 속합니다. 내 자신의 겸손한 유틸리티, classh 첫 번째 범주에 있습니다.
귀하의 질문은 원격 프로세스 실행의 결과를 기반으로 로컬 변수 상태를 설정하려는 것처럼 들릴 수 있으므로 Paramiko을 살펴 보는 것이 가장 좋습니다. 원격 명령의 결과와 함께 어떤 종류의 로컬 터미널 출력이나 오류 메시지와도 충돌하는 것을 원하지 않는다고 생각합니다.
다른 말로하면 명령 유틸리티로 ssh
이 아닌 SSH를 API로 사용하려는 것 같습니다. 이것은 필수적인 구분입니다.
ssh
명령은 UNIX (및 유사한 MS Windows 등) 환경에서 허용하는 것처럼 투명합니다. ssh
은 원격 시스템에 대한 연결을 열고 원격 작업 실행이 통신하는 여러 채널을 생성합니다. 그래서 로컬 ssh
표준 출력은 원격 명령 '표준 출력에서 될 것이며 지역 ssh
표준 에러는 같은 원격의 표준 에러의 혼합물과 ssh
명령 자신의 오류 메시지 (및 기타 출력의 될 것 ssh
호출에 -v, --verbose 옵션을 추가 할 때 표시되는 디버깅 정보). 마찬가지로 ssh
명령의 종료 상태는 일반적으로 원격 쉘의 종료 상태를 반영합니다. 그러나 그것은 로컬 오류에서 로컬 ssh
프로세스 '자신의 종료 코드가 될 수도 있습니다 --- 내 경험에 의하면 항상 255 값인 것 같습니다. 원격 명령의 종료 값 255를 구별 할 수있는 방법이 없습니다. 대 지역 프로세스의 "비정상 종료 (abend)"(비정상적인 프로세스 종료)와 나는 그렇게 할 수있는 이식 가능한 표준 방법이 없다고 생각합니다.
여기 내 요점은 코드 내에서 ssh
명령을 사용하면 로컬 프로세스 (즉, ssh
바이너리 자체 및 사용자의 실행 방식, 로컬 셸)과 원격 프로세스 (그리고 의도 한 원격 프로세스가 실행중인 셸)에서 생성 된 것입니다.ssh
은 API가 아닙니다.
반면에 Paramiko와 같은 것을 사용하면 SSH 프로토콜을 통한 세션을 설정하고 을 사용하고 명령을 실행하고, 파일을 전송하고, 다른 파일 시스템 기능을 수행하고, 다시 작성하여을 재사용 할 수 있습니다. 터널.
그런 경우 SSHClient
인스턴스를 만들고 원격 호스트에서 실행할 각 명령에 대해 .exec_command()
메서드를 호출하십시오. 이것은 개념적으로 로컬 함수 호출을 만드는 것과 비슷합니다. 어떤 이유로 든 명령을 실행할 수 없으면 예외가 발생합니다 ... stdout 또는 stderr은 가능한 경우에 병합 할 수 없습니다 중간 프로세스 (예 :이 경우에는 전혀 실행되지 않는 ssh
바이너리)에서 출력됩니다.
그래서이 방법을 권장합니다. ssh
유틸리티에 대한 단일 호출에서 모든 호출을 수행하여 발생할 수있는 복잡성을 없애고 여러 호출을 ssh
호출로 복잡성과 성능 오버 헤드없이 수행하는 방식으로 각 원격 대상에서 몇 가지 개별 명령을 실행하려는 것처럼 들립니다. 세션을 설정하고이를 API로 사용할 수 있다면 코드가 훨씬 간단하고 강력해진 것처럼 들립니다.
- 1. 파이썬에서 SSH 다이내믹 포트 포워딩 ('ssh -D')
- 2. 파이썬에서 뮤텍스를 올바르게 사용하기
- 3. 파이썬에서 해시 함수 사용하기
- 4. 현재 범위를 파이썬에서 kwargs로 사용하기
- 5. 파이썬에서 ssh 게이트웨이 - 색상을 사용할 수 있습니까?
- 6. 파이썬에서 배열에 대해 여러 개의 indicies 사용하기
- 7. 파이썬에서 모듈 가져 오기 및 사용하기
- 8. 순수 파이썬 ssh
- 9. SSH
- 10. 파이썬의 병렬 SSH
- 11. SSH 연결이 끊어졌습니다.
- 12. Ruby - SSH 세션을 시작하고 사용자를 덤프하는 방법 - Net :: SSH
- 13. 파이썬 SSH paramiko 문제 - SSH 세션
- 14. Xcode에서 libssl 사용하기
- 15. , " '"파이썬에서
- 16. 파이썬에서
- 17. 파이썬에서
- 18. ssh-keygen없이 SSH 키 쌍 (개인/공개) 생성
- 19. "ssh example.com"은 중단되지만 "ssh example.com bash -i"는
- 20. Tamir .Net SSH 라이브러리의 SSH 개인 키 1.1 사용
- 21. SVN + SSH, 매회 ssh 추가 할 필요가 없습니까? (Mac OS)
- 22. PHP를 통한 SSH 세션
- 23. SSH 키 지문 오류가
- 24. 프록시/ServiceBus/역 SSH
- 25. Subversion SSH export 질문
- 26. socket-over-ssh factory
- 27. SSH 자동화 서버
- 28. ssh tunneling with visualsvn
- 29. 명령없이 SSH-bash를 제한하십시오.
- 30. Android SSH 예제 코드
paramiko에 문제가 있습니다. folowing error가 발생합니다 : Crypto에서 가져 오기 SHA256 ImportError : 이름 SHA256을 가져올 수 없습니다. 어떻게 해결할 수 있습니까? 나는 물건을 설치할 수있는 권한이 없으며 파일 만 내 홈 폴더에 복사합니다. – Djent
@Djent : 가상 환경을 설정할 수 있습니다 (자세한 정보는 "Python virtualenv"에서 검색하십시오). 이것은 약간 복잡 할 수 있지만 작업중인 각 프로젝트에 대한 고유 한 Python 버전과 종속성을 구성 할 수있는 방법이 될 것입니다. –