Python编程:paramiko模块远程登录
【摘要】
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 (名字可以随意取)
参考文章:
文章来源: pengshiyu.blog.csdn.net,作者:彭世瑜,版权归原作者所有,如需转载,请联系作者。
原文链接:pengshiyu.blog.csdn.net/article/details/79124277
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)