Home >Backend Development >Python Tutorial >Examples of remote control and transmission using paramiko module in python

Examples of remote control and transmission using paramiko module in python

黄舟
黄舟Original
2017-10-13 11:00:112861browse

This article mainly introduces python's paramiko module to implement remote control and transmission examples. It is of great practical value. Friends in need can refer to it

This article introduces python's paramiko module to implement remote control and transmission examples. , share with everyone, the details are as follows:

1 Installation


sudo pip install paramiko

2 ssh remote control


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

After ssh is running, if you want to exit, you can kill the ssh process.

3 paramiko implements the 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 command, separated by a semicolon; means executing two commands one after another; multiple parameters can be passed in ; exec_command is a single session. After the execution is completed, it will return to the default directory when logging in, as follows:


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

If there is interaction when executing the command remotely, you can This is done using stdin.write("").

Note:

(1) Add -S after sudo to receive the password from stdin;

(2) stdin.write('password\n') finally Add \n as the end of the command, otherwise the server will keep waiting;

(3) flush() any buffer you're writing to )


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

You can use multiple processes or threads to execute commands in batches:


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 Remote file transfer

scpCopy from local server to remote server


scp local_file remote_username@remote_ip:remote_file

If the user name is specified, the user password needs to be entered after the command is executed; if the user name is not specified, after the command is executed You need to enter the user name and password; copy files from a remote location to the local


scp remote_username@remote_ip:remote_file local_file

5 Paramiko implements remote file transfer

Create a new SFTPClient object, which The object reuses the previous SSH connection, so when we use sftp to transfer files, we do not need to authenticate the user again. To implement file

upload:


sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
#sftp = ssh.open_sftp() #两者选其一即可
sftp.put('bbb.c','aaa.c') #文件上传并重命名
sftp.close()

or to implement file upload and download as follows:


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

Official Document

The above is the detailed content of Examples of remote control and transmission using paramiko module in python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn