Bagaimana untuk melaksanakan log masuk jauh linux dan sftp melalui Python

王林
Lepaskan: 2023-05-11 17:55:19
ke hadapan
1799 orang telah melayarinya
1. Gunakan arahan shell
$ sshpass -p ${passwd} ssh -p ${port} -l ${user} -o StrictHostKeyChecking=no xx.xx.xx.xx "ls -l"
Salin selepas log masuk

dan anda akan mendapati bahawa output anda mengandungi banyak maklumat yang anda tidak perlukan tetapi tidak boleh disingkirkan.
Untuk arahan shell, anda boleh terus menggunakan paip, atau ubah hala output standard ke fail untuk mendapatkan hasil pelaksanaan.

2. Gunakan subproses

Melalui Python, anda boleh memikirkan untuk menggunakan beberapa perpustakaan pelaksanaan perintah seperti os.popen, os.system, arahan, subproses, dll. untuk mendapatkan maklumat sistem secara tidak langsung. Output yang diperolehi oleh perpustakaan ini bukan sahaja mengandungi output standard tetapi juga maklumat ralat standard. Oleh itu, output mesti dibersihkan dan diformat setiap kali untuk mendapatkan data yang kita inginkan.

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) 
# 数据清理
Salin selepas log masuk

Ringkasnya, terdapat beberapa masalah menggunakan arahan ssh secara tidak langsung:

  • Pemasangan sshpass tambahan diperlukan (jika kata laluan tidak diperlukan)

  • Terdapat terlalu banyak maklumat gangguan, dan pembersihan dan pemformatan data agak menyusahkan

  • Pelaksanaan kod tidak cukup elegan dan kebolehbacaan terlalu lemah

  • sambungan ssh Ia tidak boleh digunakan semula Perintah hanya boleh dilaksanakan sekali bagi setiap sambungan

  • Kod tidak boleh digunakan pada semua platform dan hanya boleh digunakan. digunakan pada Linux dan OSX

3 Gunakan Paramiko
  • Pasang

python3 -m pip install
Salin selepas log masuk
  • Kaedah 1: Log masuk melalui sshclient berdasarkan nama pengguna dan kata laluan
    Kaedah ini Tidak dapat menggunakan semula sambungan ssh.

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()
Salin selepas log masuk
  • Kaedah 2: Log masuk melalui pengangkutan berdasarkan nama pengguna dan kata laluan
    Kaedah ini boleh menggunakan semula sambungan.

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()
Salin selepas log masuk
  • Kaedah 3: Log masuk SSHClient berdasarkan kunci awam
    Kaedah ini tidak boleh menggunakan semula sambungan ssh.

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()
Salin selepas log masuk
  • Kaedah 4: Log masuk mod pengangkutan berdasarkan kunci awam
    Kaedah ini boleh menggunakan semula sambungan.

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()
Salin selepas log masuk
  • pemindahan fail sftp

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()
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan log masuk jauh linux dan sftp melalui Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan