>  기사  >  백엔드 개발  >  Python의 paramiko 모듈에 대한 공유 학습

Python의 paramiko 모듈에 대한 공유 학습

黄舟
黄舟원래의
2017-08-23 11:38:481305검색

이 글은 주로 Python paramiko 모듈의 학습 자료를 공유합니다. 관심 있는 친구들이 참고할 수 있습니다.

paramiko는 Python 언어로 작성되었으며 암호화를 지원합니다. 원격 서버에 접속하기 위한 인증 방법입니다. paramiko는 Linux, Solaris, BSD, MacOS X, Windows 및 기타 플랫폼을 지원하여 SSH를 통해 한 플랫폼에서 다른 플랫폼으로 연결할 수 있습니다. 이 모듈을 사용하면 SFTP 파일 전송을 위한 SSH 연결 및 SFTP 프로토콜을 쉽게 수행할 수 있습니다.

먼저 다음 용어를 명확히 하겠습니다.

SSHClient: packages Channel, Transport, SFTPClient
Channel: 는 소켓과 유사한 보안 SSH 전송 채널입니다.
Transport: 는 암호화된 세션입니다. 그러나 그러한 개체의 세션은 설정되지 않았습니다.) 암호화된 터널이 생성됩니다. 이러한 터널을 채널이라고 합니다.
Session: 클라이언트가 서버와의 연결을 유지하는 데 사용되는 개체입니다. start_client( )/start_server()를 사용하여 세션을 시작합니다.

paramiko 모듈은 내부적으로 pycrypto에 의존하므로 먼저 pycrypto를 다운로드하여 설치하세요

pip3 install pycrypto

pip3 install paramiko

특정 모듈 사용법


SSHClient:

원격 연결은 두 가지 유형으로 나뉩니다. (1) 사용자 이름과 비밀번호에 따른 연결 (2) 공개 키와 비밀 키에 따른 연결실제로 paramiko 원격 작업을 사용하여 (1) SSHClient만 사용 (2) 직접 전송 만들기

사용자 이름과 비밀번호를 기반으로 연결

import paramiko
 
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='host', port=22, username='root', password='123')
# 执行命令  stdout命令结果,stderr错误
stdin, stdout, stderr = ssh.exec_command('ls')
# 获取命令结果 
result = stdout.read()
# 关闭连接
ssh.close()

SSHClient는 Transport를 캡슐화합니다


import paramiko
 
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='root', password='123')
 
ssh = paramiko.SSHClient()
ssh._transport = transport
 
stdin, stdout, stderr = ssh.exec_command('df')
print(stdout.read())
 
transport.close()

공개 키를 기반으로 연결 비밀 키


import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='host', port=22, username='root', key=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
# 关闭连接
ssh.close()

SSHClient는 전송을 캡슐화합니다.


import paramiko
 
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key)
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command('df')
transport.close()


SFTPClient:

은 원격 서버에 연결하고 업로드 및 다운로드 기능을 수행하는 데 사용됩니다. 사용자 이름과 비밀번호를 기반으로 업로드 및 다운로드

import paramiko
 
transport = paramiko.Transport(('hostname',22))
transport.connect(username='root',password='123')
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')
 
transport.close()

공개 키를 기반으로 업로드 및 다운로드


import paramiko
private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

transport = paramiko.Transport(('hostname', 22))
transport.connect(username='root', pkey=private_key )
 
sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')
 
transport.close()

Demo: 원격 명령 실행 및 파일 업로드 구현


import paramiko
 
class SSHConnection(object):
  def __init__(self, host='192.168.12.68', port=22, username='locojoy',pwd='123321QQ!'):
    self.host = host
    self.port = port
    self.username = username
    self.pwd = pwd
    self.__k = None
 
  def run(self):
    self.connect() # 连接远程服务器
    self.upload('db.py','/tmp/1.py') # 将本地的db.py文件上传到远端服务器的/tmp/目录下并改名为1.py
    self.cmd('df') # 执行df 命令
    self.close()  # 关闭连接
 
  def connect(self):
    transport = paramiko.Transport((self.host, self.port))
    transport.connect(username=self.username, password=self.pwd)
    self.__transport = transport
 
  def close(self):
    self.__transport.close()
  def upload(self,local_path,target_path):
    sftp = paramiko.SFTPClient.from_transport(self.__transport)
    sftp.put(local_path,target_path)
 
  def cmd(self, command):
    ssh = paramiko.SSHClient()
    ssh._transport = self.__transport
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command(command)
    # 获取命令结果
    result = stdout.read()
    print(result)
    return result
 
obj = SSHConnection()
obj.run()

위 내용은 Python의 paramiko 모듈에 대한 공유 학습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.