首頁  >  文章  >  後端開發  >  python中paramiko模組實現遠端控制以及傳輸的範例

python中paramiko模組實現遠端控制以及傳輸的範例

黄舟
黄舟原創
2017-10-13 11:00:112727瀏覽

本篇文章主要介紹了python的paramiko模組實現遠端控制和傳輸範例,非常具有實用價值,需要的朋友可以參考下

本文介紹了python的paramiko模組實現遠端控制和傳輸範例,分享給大家,如下:

1 安裝


#
sudo pip install paramiko

2 ssh實作遠端控制


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

ssh執行後,想退出,可以kill掉ssh行程。

3 paramiko實作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指令,以分號;分隔表示先後執行兩個指令;可以傳入多個參數; exec_command為單一會話,執行完成之後會回到登入時的缺省目錄,如下:


a='~/Videos'
b='aaa'
ssh.exec_command('cd %s;mkdir %s'%(a,b)) #aaa在a目录下
ssh.exec_command('mkdir aaa') #aaa在缺省目录下

遠端執行指令時如果有交互,可以這樣用stdin.write(“”)來完成。

注意:

(1)sudo後面要加-S,表示從stdin接收密碼;

(2)stdin.write('password\n')最後要加\n作為指令的結束,否則伺服器一直等待;

(3) flush()寫入的緩衝( flush() any buffer you're writing to )


#
stdin, stdout, stderr = ssh.exec_command('sudo -S ls')
stdin.write('password\n')
stdin.flush()

可以利用多進程或執行緒可以批次執行命令:


#
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 遠端傳輸檔案

scp從本機伺服器複製到遠端伺服器


scp local_file remote_username@remote_ip:remote_file

指定了用戶名,命令執行後需要輸入用戶密碼;如果不指定用戶名,命令執行後需要輸入使用者名稱和密碼; 從遠處複製檔案到本地


scp remote_username@remote_ip:remote_file local_file

5 paramiko實現遠端傳輸檔案

新建一個SFTPClient對象,該物件重複使用之前的SSH連接,因此,我們使用sftp傳輸檔案時,不需要再次進行使用者認證。實作檔案

上傳:


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()

官方文件

以上是python中paramiko模組實現遠端控制以及傳輸的範例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn