Paramiko模块实现SSH密钥登陆

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,一般应用在多服务器管理即堡垒机中。

 

0x01 linux python3安装paramiko模块

apt install python3-pip        #安装Python3的pip

pip3 install paramiko            #将paramiko模块安装到Python3中

 

0x02 使用SSH密钥方式登陆服务器

RSA ——非对称密钥验证

 

公钥    public   key

私钥    private  key

 

Server1    ------>     Server2

私钥                            公钥

 

生成ssh密钥

输入ssh-keygen后会提示你选择将私钥保存在哪个路径,留空则使用默认路径,然后提示你是否设置私钥的密码,留空为不设置,为了实现无密码登陆,这里不设置,然后会生成一个public公钥。

 

由于密钥的发送是单向的,也就是server1 将公钥发送给 server2的某个用户之后,server1只能登陆server2的某个用户,而server2不能反向登陆server1,那你说,我就是要登陆server1的root用户,怎么搞?别急,听我慢慢道来。

上面存在2个问题;(1)server1生成了私钥和公钥后,私钥自己保管,公钥怎么发送给server2的用户?(2)发送之后怎么登陆?

问题1的解决方法,可以查看server1生成的id_rsa.pub公钥的内容,然后复制粘贴到server2用户的.ssh/authorized_keys文件中,新创建的用户需要自己创建。(这是一种很low的方式,下面说一种比较帅气的方式)

生成公钥之后,直接通过 ssh-copy-id "user@host" 的方式发送公钥。

问题2的解决方法,通过ssh user@host的方式直接连接,例如 ssh alice@192.168.7.254,成功的话是不需要输入密码的,如果提示输入密码就说明公钥没有生效,建议把公钥先复制在文本编辑器然后删掉换行再粘贴到authorized_keys中。

 

0x03 Paramiko实现ssh账号密码登陆

paramiko ssh_client demo

#!/usr/bin/python
#-*- coding:utf-8 -*-
__author__ = "Replaceroot"


import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname='47.52.106.2', port=22, username='replaceroot', password='123456')

stdin, stdout, stderr = ssh.exec_command('ifconfig')
"""
获取命令结果
stdin,显示输入的信息
stdout,显示输出的信息
stderr,显示错误信息
"""
res, err = stdout.read(), stderr.read()
result = res if res else err        #三元运算
print(result.decode())

ssh.close()

paramkio ssh_sftp demo

#!/usr/bin/python
#-*- coding:utf-8 -*-
__author__ = "Replaceroot"

import paramiko

transport = paramiko.Transport(("47.52.106.2", 22))
transport.connect(username="replaceroot", password="123456")

sftp = paramiko.SFTPClient.from_transport(transport)

sftp.put("home/replaceroot/Backdoor.exe", "/home/replaceroot/sftp/Backdoor.exe")

#sftp.get("remove_path", "local_path")

transport.close()

0x04 Paramiko实现ssh密钥登陆

paramiko rsa_ssh_client demo

#!/usr/bin/python
#-*- coding:utf-8 -*-
__author__ = "Replaceroot"

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('id_rsa102.txt')

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname = '192.168.0.104', port=22, username="root", pkey=private_key)

stdin, stdout, stderr = ssh.exec_command('ifconfig')

result = stdout.read()
print(result.decode())
ssh.close()

paramiko rsa_ssh_sftp demo

#!/usr/bin/python
#-*- coding:utf-8 -*-
__author__ = "Replaceroot"

"""程序基于公钥密钥上传下载"""
import paramiko

private_key = paramiko.RSAKey.from_private_key_file("id_rsa102.txt")
transport = paramiko.Transport(('192.168.0.104', 22))
transport.connect(username="alice", pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)
#将Backdoor.exe 上传到192.168.0.104 '/tmp/Backdoor.exe'
#sftp.put('c:\\Backdoor.exe','/tmp/Backdoor.exe')

sftp.get('/tmp/Backdoor.exe', 'D:\\Backdoor.exe')

transport.close()

 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值