Python编程:paramiko模块远程登录

举报
彭世瑜 发表于 2021/08/13 23:04:58 2021/08/13
【摘要】 SSH:安全外壳协议 SSH: Secure Shell Protocol 安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。 说明:以下代码使用windows访问linux(centos) 安装第三方库 pip install paramiko 1 1. SSHClient方式 1.1 基于用户名和密码 imp...

SSH:安全外壳协议 SSH: Secure Shell Protocol
安全外壳协议(SSH)是一种在不安全网络上提供安全远程登录及其它安全网络服务的协议。

说明:以下代码使用windows访问linux(centos)

安装第三方库

pip install paramiko	

  
 
  • 1

1. SSHClient方式

1.1 基于用户名和密码

import paramiko

# 建立一个sshclient对象
ssh = paramiko.SSHClient()

# 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 调用connect方法连接服务器
ssh.connect(hostname="hostaddress", port=22, username="root", password="password")

# 执行命令 加入参数 get_pty=True 可执行多条指令(分号;隔开)
stdin, stdout, stderr = ssh.exec_command("df")

# 结果放到stdout中,如果有错误将放到stderr中
stdout = stdout.read().decode("utf-8")
stderr = stderr.read().decode("utf-8")
print(stdout)
print(stderr)

# 关闭连接
ssh.close()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

1.2 基于公钥密钥连接

import paramiko

# 导入文件中的私钥
private_key = paramiko.RSAKey.from_private_key_file("private_key.txt")

# 建立一个sshclient对象
ssh = paramiko.SSHClient()

# 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 调用connect方法连接服务器
ssh.connect(hostname="hostaddress", port=22, username="root", pkey=private_key)

# 执行命令
stdin, stdout, stderr = ssh.exec_command("df")

# 结果放到stdout中,如果有错误将放到stderr中
res_out = stdout.read().decode("utf-8")
res_err = stderr.read().decode("utf-8")

result = res_out if res_out else res_err
print(result)

# 关闭连接
ssh.close()


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

2. SFTPClient方式

2.1 基于用户名密码上传下载文件

import paramiko

transport = paramiko.Transport(("hostaddress", 22))

transport.connect(username="root", password="password")

sftp = paramiko.SFTPClient.from_transport(transport)

# 上传服务器
sftp.put("登鹳雀楼", "登鹳雀楼")

# 从服务器下载
sftp.get("登鹳雀楼", "1.txt")

transport.close()

print("ok")

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

2.2 基于公钥密钥上传下载文件

import paramiko

# 导入文件中的私钥
private_key = paramiko.RSAKey.from_private_key_file("private_key.txt")

transport = paramiko.Transport(("hostaddress", 22))

transport.connect(username="root", pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

# 上传服务器
sftp.put("登鹳雀楼", "登鹳雀楼")

# 从服务器下载
sftp.get("登鹳雀楼", "2.txt")

transport.close()

print("ok")

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

关于RSA非对称加密

A 电脑 --登陆–> B 电脑
A: private key 私钥
B: public key 公钥

以root用户为例:

linux 生成公钥私钥对 (密码均为空):ssh-keygen
进入目录:cd ~/.ssh
拷贝一份公钥(推荐,不要复制粘贴,有坑):cat id_dsa.pub >> authorized_keys
修改权限:chmod 600 authorized_keys

421
rwx rwx rwx
属主 属组 其他

将私钥复制出来拷贝到客户端,保存为private_key.txt (名字可以随意取)

参考文章:

  1. 《使用ssh公钥实现免密码登录》
  2. 《python模块之 paramiko》
  3. paramiko SSHClient调用sudo权限和执行多条指令的方法

文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。

原文链接:pengshiyu.blog.csdn.net/article/details/79124277

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。