Maison >développement back-end >Tutoriel Python >Exemples de contrôle à distance et de transmission utilisant le module paramiko en python

Exemples de contrôle à distance et de transmission utilisant le module paramiko en python

黄舟
黄舟original
2017-10-13 11:00:112863parcourir

Cet article présente principalement le module paramiko de python pour implémenter des exemples de contrôle à distance et de transmission. Il est d'une grande valeur pratique. Les amis dans le besoin peuvent s'y référer

Cet article présente le module paramiko de python pour implémenter le contrôle à distance et la transmission. exemples. , partagez avec tout le monde, les détails sont les suivants :

1 Installation


sudo pip install paramiko

2 ssh pour réaliser la télécommande. control


#LINUX下执行shell
ssh username@ip #输入密码后就可以对远程机器进行操作
ssh username@ip command #输入密码后远程机器就执行command

Une fois ssh exécuté, si vous souhaitez quitter, vous pouvez tuer le processus ssh.

3 paramiko implémente la commande ssh


import paramiko
hostname = '10.1.111.111'
username = 'root'
password = '111111'
port = 22 #整数不是字符串
paramiko.util.log_to_file('paramiko.log')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允许连接不在know_hosts文件中的主机
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("ls") #远程执行shell命令
print(stdout.readlines()) #输出回显结果
ssh.close()

exec_command, séparée par un point-virgule ; signifie exécuter deux commandes l'une après l'autre ; passé en paramètres ; exec_command est une seule session. Une fois l'exécution terminée, il reviendra au répertoire par défaut lors de la connexion, comme suit :


a='~/Videos'
b='aaa'
ssh.exec_command('cd %s;mkdir %s'%(a,b)) #aaa在a目录下
ssh.exec_command('mkdir aaa') #aaa在缺省目录下
Si lors de l'exécution de la commande à distance S'il y a une interaction, vous pouvez utiliser stdin.write("") pour la terminer.

Remarque :

(1) Ajoutez -S après sudo pour recevoir le mot de passe de stdin

(2) Ajoutez stdin.write('passwordn') à la fin ; n comme fin de la commande, sinon le serveur continue d'attendre ;

(3) flush() tout tampon dans lequel vous écrivez)



stdin, stdout, stderr = ssh.exec_command('sudo -S ls')
stdin.write('password\n')
stdin.flush()
Vous pouvez utiliser plusieurs processus ou threads pour exécuter des commandes par lots :



import paramiko
import threading

def ssh_cmd(ip,port,username,passwd,cmd):
  ssh = paramiko.SSHClient()
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  ssh.connect(ip,port,username,passwd)
  for m in cmd:
    stdin, stdout, stderr = ssh.exec_command(m)
    print(stdout.readlines()) 
  ssh.close()

if __name__=='__main__':
  cmd = ['ls','ifconfig']   
  a=threading.Thread(target=ssh_cmd,args=(ip,port,username,passwd,cmd))
  a.start() 
  a.join()
4 Transfert de fichiers à distance

scp copies du serveur local vers le serveur distant



scp local_file remote_username@remote_ip:remote_file
Le nom d'utilisateur est spécifié et le mot de passe de l'utilisateur doit être saisi après l'exécution de la commande ; si le nom d'utilisateur n'est pas spécifié, une fois la commande exécutée, vous devez entrer le nom d'utilisateur et le mot de passe ; copier les fichiers d'un emplacement distant vers le



5 Paramiko implémente le transfert de fichiers à distance
scp remote_username@remote_ip:remote_file local_file

Nouveau Un objet SFTPClient qui réutilise la connexion SSH précédente. Par conséquent, lorsque nous utilisons sftp pour transférer des fichiers, nous n'avons pas besoin d'authentifier à nouveau l'utilisateur. Implémentez le téléchargement du fichier

 :



ou implémentez le téléchargement et le téléchargement du fichier comme suit :
sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
#sftp = ssh.open_sftp() #两者选其一即可
sftp.put('bbb.c','aaa.c') #文件上传并重命名
sftp.close()



Documents officiels
import paramiko
t=paramiko.Transport((hostname,port))
t.connect(username=username,password=password)
sftp = paramiko.SFTPClient.from_transport(t) 
sftp.put('bbb.c','aaa.c') #文件上传并重命名
sftp.get('m.py', 'mm.py')#文件下载并重命名
t.close()

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn