全球快资讯:python paramiko连接ssh实现命令
来源:脚本之家    时间:2022-07-28 16:51:57
目录
paramiko安装原因解决执行命令 -秘钥上传下载文件—用户名密码上传下载文件-用户名秘钥

paramiko

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。

安装

pip install paramiko

模块使用


(资料图片)

执行命令—用户名+密码

#!/usr/bin/env python
#coding:utf-8
import paramiko
# 建立一个sshclient对象
ssh = paramiko.SSHClient()
# 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 调用connect方法连接服务器
ssh.connect("192.168.1.108", 22, "alex", "123")
# 执行命令
stdin, stdout, stderr = ssh.exec_command("df")
# 结果放到stdout中,如果有错误将放到stderr中
print(stdout.read().decode("utf-8"))
# 关闭连接
ssh.close();

paramiko\ecdsakey.py:164: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
self.ecdsa_curve.curve_class(), pointinfo

paramiko\kex_ecdh_nist.py:39: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
m.add_string(self.Q_C.public_numbers().encode_point())

paramiko\kex_ecdh_nist.py:96: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
self.curve, Q_S_bytes

paramiko\kex_ecdh_nist.py:111: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
hm.add_string(self.Q_C.public_numbers().encode_point())

原因

paramiko 2.4.2 依赖 cryptography,而最新的cryptography==2.5里有一些弃用的API。

解决

删掉cryptography,安装2.4.2,就不会报错了。

pip uninstall cryptography

pip install cryptography==2.4.2

执行命令 -秘钥

import paramiko
private_key_path = "/home/auto/.ssh/id_rsa"
key = paramiko.RSAKey.from_private_key_file(private_key_path)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("主机名 ", 端口, "用户名", key)
stdin, stdout, stderr = ssh.exec_command("df")
print(stdout.read().decode("utf-8"))
ssh.close()

上传下载文件—用户名密码

import os,sys
import paramiko
t = paramiko.Transport(("182.92.219.86",22))
t.connect(username="derek",password="123")
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put("/tmp/test.py","/tmp/test.py") 
t.close()
import os,sys
import paramiko
t = paramiko.Transport(("182.92.219.86",22))
t.connect(username="derek",password="123")
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get("/tmp/test.py","/tmp/test2.py")
t.close()

上传下载文件-用户名秘钥

import paramiko
pravie_key_path = "/home/auto/.ssh/id_rsa"
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
t = paramiko.Transport(("182.92.219.86",22))
t.connect(username="derek",pkey=key)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put("/tmp/test3.py","/tmp/test3.py") 
t.close()
import paramiko
pravie_key_path = "/home/auto/.ssh/id_rsa"
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
t = paramiko.Transport(("182.92.219.86",22))
t.connect(username="derek",pkey=key)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get("/tmp/test3.py","/tmp/test4.py") 
t.close()

以上就是python paramiko连接ssh实现命令的详细内容,更多关于python paramiko连接ssh的资料请关注脚本之家其它相关文章!

关键词: 执行命令 用户名密码 相关文章 关闭连接 文件操作

上一篇:

下一篇:

X 关闭

X 关闭