python的paramiko模块实现远程控制和传输示例,pythonparamiko
python的paramiko模块实现远程控制和传输示例,pythonparamiko
本文介绍了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数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
- Python配置mysql的教程(推荐),pythonmysql
- python numpy函数中的linspace创建等差数列详解,numpylinsp
- Python实现的排列组合计算操作示例,python示例
- python 二分查找和快速排序实例详解,python排序实例详解
- python出现"IndentationError: unexpected indent"错误解决办法
- 使用Python操作excel文件的实例代码,
- python中import reload __import__的区别详解,python__import_
- python中文件变化监控示例(watchdog),
- 基于使用paramiko执行远程linux主机命令(详解),paramikol
评论关闭