반응형
파이썬 SFTP 전송할 때는 pysftp 로 사용해서 전송 성공하였습니다.
라이브러리 설치
pip install pysftp
import pysftp
host = '호스트명' # 호스트명만 입력. sftp:// 는 필요하지 않다.
port = 193 # int값으로 sftp서버의 포트 번호를 입력
username = '유저' # 서버 유저명
password = '비밀번호' # 유저 비밀번호
hostkeys = None
# 서버에 저장되어 있는 모든 호스트키 정보를 불러오는 코드
cnopts = pysftp.CnOpts()
# 접속을 시도하는 호스트에 대한 호스트키 정보가 존재하는지 확인
# 존재하지 않으면 cnopts.hostkeys를 None으로 설정해줌으로써 첫 접속을 가능하게 함
if cnopts.hostkeys.lookup(host) == None:
print("Hostkey for " + host + " doesn't exist")
hostkeys = cnopts.hostkeys # 혹시 모르니 다른 호스트키 정보들 백업
cnopts.hostkeys = None
# 첫 접속이 성공하면, 호스트에 대한 호스트키 정보를 서버에 저장.
# 두번째 접속부터는 호스트키를 확인하며 접속하게 됨.
# sftp 접속을 실행
with pysftp.Connection(
host,
port = port,
username = username,
password = password,
cnopts = cnopts) as sftp:
# 접속이 완료된 후 이 부분이 호스트키를 저장하는 부분
# 처음 접속 할 때만 실행되는 코드
if hostkeys != None:
print("New Host. Caching hostkey for " + host)
hostkeys.add(host, sftp.remote_server_key.get_name(), sftp.remote_server_key) # 호스트와 호스트키를 추가
hostkeys.save(pysftp.helpers.known_hosts()) # 새로운 호스트 정보 저장
# 폴더에 있는 모든 파일들을 한거번에 업로드 하고 싶을 땐 'put_d' 를 사용
# 예) sftp.put_d('업로드 할 파일들이 있는 폴더 경로', '/')
# 여러 파일들을 개별로 업로드 하고 싶을 땐 'put'을 여러번 사용
# 예) sftp.put('파일1 경로')
# 예) sftp.put('파일2 경로')
# sftp서버에 있는 파일과 폴더들을 보고 싶을 땐 아래 함수 실행
print(sftp.listdir('/'))
# 모든 작업이 끝나면 접속 종료
sftp.close()
다른 라이브러리 Paramiko, ftplib 는 실패하거나, 권한 오류가 났습니다.
반응형
'프로그래밍 > python' 카테고리의 다른 글
키움 API 버전처리를 받으시려면 현재 실행 중인 OPEN API OCX를 탑재한 프로그램을 종료 하신 후 오류 (0) | 2022.03.02 |
---|---|
파이썬 버전 바꿔서 실행 및 pip 버전 변경 (0) | 2022.03.01 |
파이썬 셀레니움 특정 글자 포함된 태그 가져오기 기록 (0) | 2022.02.19 |
파이썬 pyinstaller 콘솔창 제거 (0) | 2022.02.03 |
파이썬 셀레니움 팝업창 닫기 python selenium close popups (0) | 2022.01.25 |