paramiko模块
该模块基于ssh,用于连接远程服务器并执行相关操作
1,sshCLIENT,基于用户名和密码连接
1.1
import paramiko
# 该模块基于ssh,用于连接远程服务器并执行相关操作
ssh = paramiko.SSHClient()
# 创建ssh对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 允许ssh连接不在known_hosts文件中的主机
ssh.connect(hostname="10.1.1.99", port=22, username="root", password="123456")
# 连接服务器
stdin, stdout, stderr = ssh.exec_command("df -hT")
# 执行命令
result = stdout.read() # 获取结果
print(result.decode())
ssh.close() # 关闭连接
1.2,sshclient封装transport
import paramiko transport = paramiko.Transport(('10.1.1.99', 22)) transport.connect(username='root', password='123456') ssh = paramiko.SSHClient() ssh._transport = transport stdin, stdout, stderr = ssh.exec_command("ip ro sh") # 执行命令 result = stdout.read() # 获取结果 print(result.decode()) ssh.close() # 关闭连接
2, SFTPclient用于连接远程服务器,执行上传下载
import paramiko
transport = paramiko.Transport(('10.1.1.99', 22))
transport.connect(username='root', password='123456')
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('paramiko-test.txt', '/root/yn/f1')
# 上传本地文件到远程服务器
sftp.get('/root/yn/f1', 'paramiko-test.txt')
# 把远程服务器的文件下载到本地
sftp.close()
# 注意不论是上传还是下载,目标location不能为目录,必须是文件。不然没法写入,会报错!
上述不论是登录执行命令还是上传和下载也好,密码都要明文输入,这样就带来了安全隐患。
3, 基于公钥密钥的连接
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.1.1.200', port=22, username='yn', pkey=private_key)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('free -m')
# 获取命令结果
result = stdout.read()
print(result.decode())
# 关闭连接
ssh.close()
注意思路:这里是把linux主机上的私钥拷贝过来的,也就相当于把window的公钥发给了linux,然后去连接,linux,(当然windows也可以利用Xshell来产生公钥进行连接linux)这里尤其要注意的点是在linux的主机上,一定不要忘了把自己的公钥拷贝到authorized_keys这个验证文件里面,否则会报错!这是浪费了一个下午的时间和精力得来的经验!!!
4, 基于公钥进行上传和下载
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
transport = paramiko.Transport(('10.1.1.200', 22))
transport.connect(username='yn', pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
# sftp.put("paramiko-test.txt", "/home/yn/recv.txt") # 上传文件
sftp.get("/home/yn/recv.txt", "paramiko.txt") # 下载文件
transport.close()
注意:不管是上传还是下载目标文件必须要写。
拥抱不确定,未来可期!喜欢该文章请不吝点赞推荐,如有疑问欢迎留言,我们一起探讨。

浙公网安备 33010602011771号