ssh를 사용하는 환경(ex, Unix/Linux 서버)인 경우 파이썬에서 제공하는 "paramiko" 라이브러리를 설치하여 손쉽게 ssh 접속하여 원하는 작업을 자동화하여 사용할 수 있습니다. 물론 기존에도 쉘 스크립트를 통해 어느 정도 자동화가 가능하지만 파이썬에서 제공되는 자동화에 비하면 한계점(ex, 쉘 스크립트 최초 배포, 쉘 수정 시 배포 필요 등) 들이 있어 파이썬을 통한 업무 자동화를 개인적으로는 추천드립니다.
기존에 ssh 접속하여 직접 Command를 실행하였던 작업들 또는 수작업으로 특정 파일을 업로드/다운로드하였던 부분들을 이젠 좀 더 쉽고 고급스럽게 자동화하여 사용이 가능합니다.
이런 기능을 본인의 업무 환경에 맞게 잘 활용한다면 여러분들의 업무 효율성을 조금이나마 높을 수 있을 것이라고 생각합니다.
우선 해당 기능을 사용하기 위해서는 늘 그래 왔듯이 paramiko 라이브러리가 사전에 설치가 되어 있어야 하며, 당연히 ssh 접속하고자 하는 대상 장비에 ssh가 설치 및 활성화되어 있어야 하는 점 참조 바랍니다.
저 같은 경우 모든 작업을 파이참을 통해 이루어지다 보니 파이참을 통해 paramiko 2.5.0 버전을 설치하였습니다.
( ※ 파이참이 아닌 pip 명령어로 설치하는 경우 "pip install paramiko==2.5.0" 명령어를 통해 설치 진행하셔도 됩니다.)
1. ssh 접속하기
ssh 접속은 아래와 같이 몇 줄 안 되는 코드로 통해 손쉽게 접속이 가능합니다.
import paramiko
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect("192.168.0.236", username="root", password="abc123") # 대상IP, User명, 패스워드 입력
print('ssh connected.') # ssh 정상 접속 후 메시지 출력
ssh.close() # ssh 접속하여 모든 작업 후 ssh 접속 close 하기
except Exception as err:
print(err) # ssh 접속 실패 시 ssh 관련 에러 메시지 출력
정상적으로 ssh 접속이 되는 경우 "ssh connected." 메시지가 출력 될 것이고, 만약 ssh 접속이 안 되는 경우는 아래와 같이 ssh 에러 메시지가 출력될 것입니다.
2. 명령어 실행
특정 명령어를 실행하는 경우 위 예제 코드에서 print('ssh connected.') 부분과 ssh.close() 사이에 아래 코드를 넣어 사용하시면 됩니다. 저 같은 경우에는 디렉토리 및 파일 리스트를 확인하는 예제이기 때문에 리스트 결과를 화면에 출력까지 하는 것이며, 만약 실행하고자 하는 명령어가 리턴 받을 내용이 없다고 하면 명령어(ssh.exec_command 부분)만 활용하셔도 됩니다.
stdin, stdout, stderr = ssh.exec_command("ls -l") # ssh 접속한 경로에 디렉토리 및 파일 리스트 확인 명령어 실행
lines = stdout.readlines()
for i in lines: # for문을 통해 명령어 결과값 출력.
re = str(i).replace('\n', '')
print(re)
3. 파일 업로드/다운로드
paramiko 라이브러리를 통해 작업하고자 하는 대상 장비에 sftp로 접속하여 파일을 업로드/다운로드가 가능합니다.
예제 코드는 아래와 같습니다. 저 같은 경우 프로젝트 디렉토리 내에 위치한 "upload_file.txt" 파일을 /tmp 디렉토리에 업로드하였습니다.
1) 업로드
import paramiko
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect("192.168.0.236", username="root", password="abc123") # 대상 IP, User명, 패스워드 입력
print('ssh connected.\n')
# File Upload
sftp = ssh.open_sftp()
sftp.put('.\\upload_file.txt', '/tmp/upload_file.txt')
print('sftp upload success.\n')
ssh.close()
except Exception as err:
print(err)
파일이 정상적으로 업로드되면 아래와 "sftp upload success." 메시지가 출력이 될 것이며, 대상 서버에 접속해 보면 업로드한 파일이 업로드된 것을 확인할 수 있습니다.
2) 다운로드
파일을 다운로드하는 경우 위 예제 코드에서 "sftp.put('.\\upload_file.txt', '/tmp/upload_file.txt')" 이 부분을 아래와 같이 변경하여 사용하시면 됩니다.
저 같은 경우에는 "/tmp/download_file.txt" 파일을 현재 프로젝트 디렉토리로 다운로드하도록 하겠습니다.
sftp.get('/tmp/download_file.txt', '.\\download_file.txt')
'Development > 파이썬 [Python]' 카테고리의 다른 글
[Python] 웹 크롤링(Crawling) 주의사항 (0) | 2021.01.21 |
---|---|
[Python] 파이썬 속도개선 (0) | 2021.01.05 |
[Python] 파이썬 postgresql 접속 및 select 하기 (0) | 2020.12.30 |
[Python] pyinstaller로 exe 실행파일 만들때 파일 버전정보 설정 (0) | 2020.12.30 |
[Python] 파이썬 exe 실행파일 만들기 (17) | 2020.12.29 |