Heim > Betrieb und Instandhaltung > Betrieb und Wartung von Linux > So implementieren Sie Linux-Remote-Login und SFTP über Python

So implementieren Sie Linux-Remote-Login und SFTP über Python

王林
Freigeben: 2023-05-11 17:55:19
nach vorne
1862 Leute haben es durchsucht
1. Verwenden Sie den Shell-Befehl
$ sshpass -p ${passwd} ssh -p ${port} -l ${user} -o StrictHostKeyChecking=no xx.xx.xx.xx "ls -l"
Nach dem Login kopieren

Dann werden Sie feststellen, dass Ihre Ausgabe viele Informationen enthält, die Sie nicht benötigen, die aber nicht entfernt werden können.
Für Shell-Befehle können Sie Pipes direkt verwenden oder die Standardausgabe in eine Datei umleiten, um Ausführungsergebnisse zu erhalten.

2. Verwenden von Unterprozessen

Über Python können Sie sich die Verwendung einiger Befehlsausführungsbibliotheken wie os.popen, os.system, Befehle, Unterprozesse usw. vorstellen, um Systeminformationen indirekt abzurufen. Die von diesen Bibliotheken erhaltene Ausgabe enthält nicht nur die Standardausgabe, sondern auch Standardfehlerinformationen. Daher muss die Ausgabe jedes Mal bereinigt und formatiert werden, um die gewünschten Daten zu erhalten.

import subprocess 
ssh_cmd = "sshpass -p ${passwd} ssh -p 22 -l root -o StrictHostKeyChecking=no xx.xx.xx.xx  'ls -l'" 
status, output = subprocess.getstatusoutput(ssh_cmd) 
# 数据清理
Nach dem Login kopieren

Kurz gesagt, es gibt mehrere Probleme bei der indirekten Verwendung von SSH-Befehlen:

  • Erfordert eine zusätzliche Installation von sshpass (wenn kein Passwort erforderlich ist)

  • Es gibt zu viele störende Informationen und die Datenbereinigung und -formatierung ist recht aufwändig problematisch

  • Code-Implementierung Nicht elegant genug, die Lesbarkeit ist zu schlecht

  • SSH-Verbindung kann nicht wiederverwendet werden, eine Verbindung kann nur einen Befehl ausführen

  • Der Code kann nicht auf allen Plattformen verwendet werden, sondern nur unter Linux und OSX

3. Verwenden Sie Paramiko
  • Installation

python3 -m pip install
Nach dem Login kopieren
  • Melden Sie sich über sshclient basierend auf Benutzername und Passwort an
    Diese Methode kann die SSH-Verbindung nicht wiederverwenden.

import paramiko 
 
ssh = paramiko.SSHClient() 
# 允许连接不在know_hosts文件中的主机 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
 
# 建立连接 
ssh.connect("xx.xx.xx.xx", username="root", port=22, password="you_password") 
 
# 使用这个连接执行命令 
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("ls -l") 
 
# 获取输出 
print(ssh_stdout.read()) 
 
# 关闭连接 
ssh.close()
Nach dem Login kopieren
  • Methode 2: Melden Sie sich per Transport basierend auf Benutzername und Passwort an
    Diese Methode kann die Verbindung wiederverwenden.

import paramiko 
 
# 建立连接 
trans = paramiko.Transport(("xx.xx.xx.xx", 22)) 
trans.connect(username="root", password="you_passwd") 

ssh = paramiko.SSHClient() 
ssh._transport = trans 
 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("ls -l") 
print(ssh_stdout.read()) 
 
# 关闭连接 
trans.close()
Nach dem Login kopieren
  • Methode 3: SSH-Client-Anmeldung basierend auf öffentlichem Schlüssel
    Diese Methode kann die SSH-Verbindung nicht wiederverwenden.

import paramiko 
 
# 指定本地的RSA私钥文件 
# 如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。
pkey = paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa', password='12345') 
 
# 建立连接 
ssh = paramiko.SSHClient() 
ssh.connect(hostname='xx.xx.xx.xx', 
            port=22, 
            username='you_username', 
            pkey=pkey) 
 
# 执行命令 
stdin, stdout, stderr = ssh.exec_command('ls -l') 
 
# 结果放到stdout中,如果有错误将放到stderr中 
print(stdout.read()) 
 
# 关闭连接 
ssh.close()
Nach dem Login kopieren
  • Methode 4: Anmeldung per Transportmethode basierend auf öffentlichem Schlüssel
    Diese Methode kann die Verbindung wiederverwenden.

import paramiko 
 
# 指定本地的RSA私钥文件 
# 如果建立密钥对时设置了密码,password为passphrase。如果没有passphrase则无需指定password参数。 
pkey = paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa', password='12345') 
 
# 建立连接 
trans = paramiko.Transport(('xx.xx.xx.xx', 22)) 
trans.connect(username='you_username', pkey=pkey) 

ssh = paramiko.SSHClient() 
ssh._transport = trans 
 
# 执行命令,和传统方法一样 
stdin, stdout, stderr = ssh.exec_command('df -hl') 
print(stdout.read().decode()) 
 
# 关闭连接 
trans.close()
Nach dem Login kopieren
  • sftp-Dateiübertragung

import paramiko 
 
trans = paramiko.Transport(('xx.xx.xx.xx', 22)) 
 
# 建立连接 
trans.connect(username='you_username', password='you_passwd') 
 
# 实例化一个 sftp对象,指定连接的通道 
sftp = paramiko.SFTPClient.from_transport(trans) 
 
# 发送文件 
sftp.put(localpath='/tmp/11.txt', remotepath='/tmp/22.txt') 
 
# 下载文件 
sftp.get(remotepath='/tmp/22.txt', localpath='/tmp/33.txt') 
trans.close()
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo implementieren Sie Linux-Remote-Login und SFTP über Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage