2-python库之-paramiko远程控
2020-02-19 本文已影响0人
Creator_Ly
在做自动化操作的时候,经常会先要到机器里面看一些设备信息,运行脚本等,这时候ssh远程登陆工具的好处就可想而知,paramiko库提供了,ssh远程登陆接口,不仅可以执行shell命令,而且可以上传下载文件等。
由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto
使用linux登录别的ssh
ssh root@192.168.0.9
指定端口
ssh root@192.168.0.9 -p 2222
1.登陆执行shell命令
直接查看例子:
创建实例,使用connect连接,使用exec_command执行命令,使用stdout.read读取返回的结果。
import paramiko
if __name__ == '__main__':
# 实例化SSHClient
client = paramiko.SSHClient()
# 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect(hostname="192.168.62.128", port=22, username="python", password="admin")
except Exception as e:
print("---异常---:", e)
if client:
# 打开一个Channel并执行命令
command = "ps -aux | grep test"
stdin, stdout, stderr = client.exec_command(command) # stdout 为正确输出,stderr为错误输出,同时是有1个变量有值
# 打印执行结果
command_result = stdout.read().decode('utf-8')
print("1111", command_result)
# 关闭SSHClient
client.close()
2.上传、下载文件
ubuntu上面安装ftp服务器作为ftp测试服务器
1.安装
sudo apt-get install vsftpd
2.配置
sudo vim /etc/vsftpd.conf
打开写
write_enable=YES
最后加上ftp服务器的位置
# 配置ftp服务器的上传下载文件所在的目录。
local_root=/home/python/ftpfile
创建ftpfile文件夹,并且创建一个get_file文件
3.重启
sudo service vsftpd restart
4.测试
python本地放一个put_file文件,用来上传到服务器。
ubuntu服务器放一个get_file文件,用来下载到本地。
代码如下:
import paramiko
if __name__ == '__main__':
# 获取Transport实例
tran = paramiko.Transport(('192.168.62.128', 22))
# 连接SSH服务端,使用password
tran.connect(username="python", password='123456')
# 获取SFTP实例
sftp = paramiko.SFTPClient.from_transport(tran)
# 执行上传动作
sftp.put("./put_file", "/home/python/ftpfile/put_file")
# 执行下载动作
sftp.get("/home/python/ftpfile/get_file", "./get_file")
tran.close()
可以看到服务器多了一个put_file文件,本地多了一个get_file文件
3.扩展:http文件服务器
正常情况我们一般用文件服务器进行下载文件,不会使用ftp的方式下载,
ubuntu里面安装apache
sudo apt-get install apache2
配置文件在/etc/apache2/apache2.conf
里面,如果有修改的话,使用service apache2 restart
进行重启。
将文件放在/var/www/html
下面,或者做一个软连接ln -s /home/nn/package/ file在/var/www/html/
python使用wget下载
import wget
url = 'http://192.168.62.128/test'
filename = wget.download(url)