Paramiko
1. Installation
PIP3 Install Paramiko
Second, use
Sshclient
Used to connect to a remote server and execute basic commands
Connect based on user name password:
Import Paramiko # SSH object created ssh = Paramiko. Sshclient () # allows connections to host Ssh.set_missing_host_key_policy (Paramiko) that are not in the Know_hosts file. Autoaddpolicy ()) # Connection Server Ssh.connect (hostname= ' c1.salt.com ', port=22, username= ' Wupeiqi ', password= ' 123 ') # Execute command stdin, stdout, stderr = Ssh.exec_command (' ls ') # get command result = Stdout.read () # Close Connection ssh.close ()
#SSHClient package Transportimport Paramikotransport = Paramiko. Transport (' hostname ', ()) Transport.connect (username= ' Wupeiqi ', password= ' 123 ') ssh = Paramiko. Sshclient () Ssh._transport = Transportstdin, stdout, stderr = Ssh.exec_command (' df ') print stdout.read () transport.close ()
connection based on public key:
Import Paramiko Private_key = Paramiko. Rsakey.from_private_key_file ('/home/auto/.ssh/id_rsa ') # create ssh object ssh = Paramiko. Sshclient () # allows connections to host Ssh.set_missing_host_key_policy (Paramiko) that are not in the Know_hosts file. Autoaddpolicy ()) # Connection Server Ssh.connect (hostname= ' c1.salt.com ', port=22, username= ' Wupeiqi ', Key=private_key) # Execute command stdin, stdout, stderr = Ssh.exec_command (' df ') # get command result = Stdout.read () # Close Connection ssh.close ()
#SSHClient package Transportimport Paramikoprivate_key = Paramiko. Rsakey.from_private_key_file ('/home/auto/.ssh/id_rsa ') transport = Paramiko. Transport (' hostname ', ()) Transport.connect (username= ' Wupeiqi ', pkey=private_key) ssh = Paramiko. Sshclient () Ssh._transport = Transportstdin, stdout, stderr = Ssh.exec_command (' df ') transport.close ()
sftpclient
For connecting to a remote server and performing an upload download
Upload and download based on user name password:
Import Paramiko transport = Paramiko. Transport (' hostname ', ()) Transport.connect (username= ' Wupeiqi ', password= ' 123 ') sftp = Paramiko. Sftpclient.from_transport (transport) # upload location.py to Server/tmp/test.pysftp.put ('/tmp/location.py ', '/tmp/test.py ') # download Remove_path to local local_pathsftp.get (' Remove_path ', ' Local_path ') transport.close ()
upload and download based on public key keys:
Import Paramiko Private_key = Paramiko. Rsakey.from_private_key_file ('/home/auto/.ssh/id_rsa ') transport = Paramiko. Transport (' hostname ', ()) Transport.connect (username= ' Wupeiqi ', pkey=private_key) sftp = Paramiko. Sftpclient.from_transport (transport) # upload location.py to Server/tmp/test.pysftp.put ('/tmp/location.py ', '/tmp/test.py ') # download Remove_path to local local_pathsftp.get (' Remove_path ', ' Local_path ') transport.close ()
#!/usr/bin/env python#-*-coding:utf-8-*-import paramikoimport uuidclass sshconnection (object): Def __init__ (self, ho St= ' 172.16.103.191 ', port=22, username= ' Wupeiqi ', pwd= ' 123 '): Self.host = host Self.port = Port self.u Sername = Username Self.pwd = pwd Self.__k = None def create_file (self): file_name = str (uuid.uuid 4 ()) with open (file_name, ' W ') as F:f.write (' SB ') return file_name def run: Self. Connect () self.upload ('/home/wupeiqi/tttttttttttt.py ') self.rename ('/home/wupeiqi/tttttttttttt.py ', '/home/w upeiqi/ooooooooo.py) self.close () def Connect (self): transport = Paramiko. Transport ((Self.host,self.port)) Transport.connect (USERNAME=SELF.USERNAME,PASSWORD=SELF.PWD) Self.__transpor T = Transport def close (self): Self.__transport.close () def upload (Self,target_path): # Connect, upload F Ile_name = Self.create_file () sftp = Paramiko. SFTpclient.from_transport (self.__transport) # upload location.py to server/tmp/test.py sftp.put (file_name, Target_path ) def rename (self, Old_path, new_path): SSH = Paramiko. Sshclient () Ssh._transport = self.__transport # execute command cmd = "mv%s%s"% (Old_path, New_path,) stdin, stdout, stderr = Ssh.exec_command (cmd) # gets the command result = Stdout.read () def cmd (self, command): SSH = Paramiko. Sshclient () Ssh._transport = self.__transport # Execute command stdin, stdout, stderr = ssh.exec_command (command # get Command result = Stdout.read () return result ha = Sshconnection () ha.run ()
# For more restriction commands, you need to set/etc/sudoers Defaults Requirettydefaults:cmdb in the system !requiretty
Import Paramikoimport Uuidclass sshconnection (object): Def __init__ (self, host= ' 192.168.11.61 ', port=22, Username= ' ale X ', pwd= ' alex3714 '): self.host = host Self.port = Port Self.username = Username Self.pwd = pwd Self.__k = None def run (self): Self.connect () pass Self.close () def Connect (self): Transport = Paramiko. Transport ((Self.host,self.port)) Transport.connect (USERNAME=SELF.USERNAME,PASSWORD=SELF.PWD) Self.__transpor T = Transport def close (self): Self.__transport.close () def-cmd (self, command): SSH = Paramiko. Sshclient () Ssh._transport = self.__transport # Execute command stdin, stdout, stderr = ssh.exec_command (command # get Command result = Stdout.read () return result def upload (Self,local_path, target_path): # Connect, upload sftp = Paramiko. Sftpclient.from_transport (self.__transport) # upload location.py to server/tmp/test.py sftp.put(Local_path, target_path) ssh = Sshconnection () ssh.connect () r1 = ssh.cmd (' df ') ssh.upload (' s2.py ', "/home/alex/s7.py") Ssh.close ()
Fortress machine
Import paramikoimport sysimport osimport socketimport getpassfrom paramiko.py3compat import u# Windows does not has Termi Os...try:import Termios Import TTY Has_termios = trueexcept Importerror:has_termios = falsedef interactive_s Hell (chan): If Has_termios:posix_shell (chan) Else:windows_shell (chan) def Posix_shell (Chan): Impor T Select oldtty = termios.tcgetattr (Sys.stdin) Try:tty.setraw (Sys.stdin.fileno ()) Tty.setcbreak (SYS.S Tdin.fileno ()) chan.settimeout (0.0) log = open (' Handle.log ', ' A + ', encoding= ' utf-8 ') flag = False Temp_list = [] While True:r, W, E = Select.select ([Chan, Sys.stdin], [], []) if Chan in r:try:x = U (CHAN.RECV (1024x768)) If Len (x) = = 0: Sys.stdout.write (' \r\n*** eof\r\n ') break if Flag:if x. StartsWith (' \ r \ n '): Pass Else:temp_list.append (x) Flag = False sys.stdout.write (x) Sys.stdout.flush () except Socke T.timeout:pass if sys.stdin in r:x = Sys.stdin.read (1) impor T json if Len (x) = = 0:break if x = = ' \ t ': flag = True Else:temp_list.append (x) if x = = ' \ R ': Log.write ('. Join (Temp_list)) Log.flush () temp_list.clear () chan.send (x) finall Y:termios.tcsetattr (Sys.stdin, Termios. Tcsadrain, Oldtty) def Windows_shell (Chan): Import threading Sys.stdout.write ("Line-buffered terminal emulation. Press F6 or ^z to send eof.\r\n\r\n ") def writeall (sock): while true:data = sock.recv if not data:sys.stdout.write (' \r\n*** EOF ***\r\n\r\n ') sys.stdout.flu SH () break sys.stdout.write (data) Sys.stdout.flush () writer = Threading. Thread (Target=writeall, Args= (chan)) Writer.start () try:while true:d = Sys.stdin.read (1) If not d:break chan.send (d) except Eoferror: # user hits ^z or F6 passdef Run (): Default_username = Getpass.getuser () Username = input (' username [%s]: '% default_username ') If Len (Usernam e) = = 0:username = default_username hostname = input (' hostname: ') If LEN (hostname) = = 0:print (' * * * Hostname required. ') Sys.exit (1) tran = Paramiko. Transport ((hostname,,)) tran.start_client () Default_auth = "P" auth = input (' Auth by (p) Assword or (r) SA key[% S] '% Default_auth) if Len (auth) = = 0:auth = Default_auth if auth = = ' R ': DEfault_path = Os.path.join (os.environ[' HOME '), '. SSH ', ' id_rsa ') path = input (' RSA key [%s]: '% Default_path ') If len (path) = = 0:path = Default_path Try:key = Paramiko. Rsakey.from_private_key_file (path) except Paramiko. Passwordrequiredexception:password = Getpass.getpass (' RSA key password: ') key = Paramiko. Rsakey.from_private_key_file (path, password) Tran.auth_publickey (username, key) ELSE:PW = Getpass.getpas S (' Password for%[email protected]%s: '% (username, hostname)) Tran.auth_password (username, PW) # Open a channel Chan = Tran.open_session () # Gets a terminal chan.get_pty () # activator Chan.invoke_shell () Interactive_shell (Chan) c Han.close () tran.close () if __name__ = = ' __main__ ': Run ()
Python Road Fortress Machine Paramiko