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

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

黄舟
發布: 2017-10-13 11:00:11
原創
2822 人瀏覽過

本篇文章主要介紹了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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板