Maison >développement back-end >Tutoriel Python >Exemples de contrôle à distance et de transmission utilisant le module paramiko en python
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 à distancescp copies du serveur local vers le serveur distant
scp local_file remote_username@remote_ip:remote_fileLe 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
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
:
sftp = paramiko.SFTPClient.from_transport(ssh.get_transport()) #sftp = ssh.open_sftp() #两者选其一即可 sftp.put('bbb.c','aaa.c') #文件上传并重命名 sftp.close()
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!