python实现ssh及sftp功能(实例代码)

时间:2021-05-22

1.在Linux上我们通过scp命令实现主机间的文件传送,通过ssh实现远程登录 ,比如 我们经常使用的xshell远程登录工具,就是基础ssh协议实现window主机远程登录Linux主机

 下面简单的在python实现这几个功能 下面使用到paramiko模块,这个不是python的内置模块,我直接通过pycharm下载这个模块,

第一步实现一个简单的ssh登录命令 代码如下:

import paramiko# 创建SSH对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#第一次登录的认证信息# 连接服务器ssh.connect(hostname='192.168.158.131', port=22, username='root', password='hadoop')# 执行命令stdin, stdout, stderr = ssh.exec_command('ls /')# 获取命令结果res,err = stdout.read(),stderr.read()result = res if res else errprint(result.decode())# 关闭连接ssh.close()

  登录并能实现简单的命令发送 和接收指令结果 ,这里面的方法写死了 ,但总算连接成功了,应为开始虚拟机的在学习iptables加了许多规则,并且在ssh 的服务器端修改了默认端口一直

连不上,修改配置文件后设置允许远程主机远程连接 ,/etc/ssh/sshd_config文件中配置  

  然后实现模拟Linux的scp 命令上传下载文件 ,使用了paramiko的Transport 简单的测试代码如下

import paramikotransport = paramiko.Transport(('192.168.158.131', 22))transport.connect(username='root', password='hadoop')sftp = paramiko.SFTPClient.from_transport(transport)# 将location.py 上传至服务器 /tmp/test.pysftp.put('fromlinux.txt', '/tmp/test_from_win')# 将remove_path 下载到本地 local_path# sftp.get('/root/oldgirl.txt', 'fromlinux.txt')transport.close()

同样的也能 测试成功 ,能实现文件的上传与下载

最后注意到paramiko.RSAKey这个功能,能思想比较牛逼的ssh免密登录,核心的过程就是在Linux通过ssh-keygen在主机上生成一对密钥 ,公钥放在~/.ssh/authorized_keys文件在,将私钥拷贝到windows主机的环境目录下 ,

import paramikoprivate_key = paramiko.RSAKey.from_private_key_file('id_rsa31.txt')#要将私钥放在这里# 创建SSH对象ssh = paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh.connect(hostname='10.0.0.41', port=22, username='fang', pkey=private_key)# 执行命令stdin, stdout, stderr = ssh.exec_command('df;ifconfig')result = stdout.read()print(result.decode())stdin, stdout2, stderr = ssh.exec_command('ifconfig')# 获取命令结果result2 = stdout2.read()print(result2.decode())# 关闭连接ssh.close()

成功的实现了免密连接,代码知识做简单的测试用,以连接为主,没考虑其他的实际需要

这些东西玩了一下午,还是挺神奇的,

总结

到此这篇关于python实现ssh及sftp功能 的文章就介绍到这了,更多相关python实现ssh sftp 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章