- [Python] Python SSH Paramiko2022년 04월 12일
- 홀쑥
- 작성자
- 2022.04.12.:58
Paramiko
Paramiko는 클라이언트와 서버 기능을 모두 제공하는 SSH 프로토콜의 순수 Python 구현체(C와 Rust 확장을 사용하지만 암호화를 위해 사용)
일반적으로 원격 쉘 명령 실행과 파일전송과 같은 일반적인 클라이언트에 사용
Python 2.7 이상, 3.4 이상 사용할 수 있음설치
python -m pip install paramiko
사용
연결
import paramiko client = paramiko.SSHClient() username = 'username' password = 'password' user_info_dict = { 'username' : username, 'password' : password, } client.connect('127.0.0.1', **user_info_dict) ~~~ client.close()
Host Key
ssh 접근 시 서버 컴퓨터가 내가 알던 컴퓨터가 맞는 지 확인하는 과정에 필요한 SSH Host Key를 저장한다.
ssh를 사용해봤다면 한번 쯤 공백 엔터, 'y', 'yes'를 입력했던 경험이 있을 것이다.
paramiko에선
SSHClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
를 사용하여 Host key를 저장하게 할 수 있다.(기본값은 RejectPolicy)
import paramiko client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) server_info_dict = { 'username' : username, # ID (str) 'password' : password, # PW (str) 'port' : port, # PORT (int) 'hostname' : hostname # IP (str) } client.connect(**server_info_dict)
함수
exec_command(명령) : 서버에서 명령을 실행, 명령 실행이 완료되면 채널이 닫히고 재사용할 수 없음
~ stdin, stdout, stderr = client.exec_command(command) data = stdout.readlines()
exec_command로 sudo 사용
~ stdin, stdout, stderr = client.exec_command(command) # sudo 가 포함된 명령어 stdin.write(f'{password}\n') stdin.flush() # write 후 flush를 해야 동작함 data = stdout.read()
하지만 내가 사용하던 경우 sudo 명령어로 실행시킬 수 없는 상황이였기에 invoke_shell을 사용하여
sudo su - 로 유저 변경 후 명령어를 실행시켰다.def wait_stream(chan): time.sleep(1) out = err = '' while chan.recv_ready(): out += chan.recv(1024) while chan.recv_stderr_ready(): err += chan.recv_stderr(1024) return out, err ~ channel = client.invoke_shell() channel.send('sudo su -\n') out, err = wait_stream(channel) channel.send(f'{password}\n') out, err = wait_stream(channel) channel.send(f'{command}') out, err = wait_stream(channel) data = out.splitlines()
참고자료
'Language > Python' 카테고리의 다른 글
[Python] Poetry 사용법 (2) 2024.11.10 [Python] Poetry 설치 (0) 2024.10.02 [WSL2] Ubuntu-20.04 Python3 pip, venv설치 (0) 2022.02.16 [Anaconda Python] WSL2 Ubuntu 20.04 우분투에 아나콘다 설치 (0) 2021.06.08 [Python] 스크래핑/크롤링 (0) 2020.06.26 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)