Django中paramiko使用密钥执行命令和上传文件

这几天写一个游戏维护的平台,刚开始是直接用账号和密码直接明文登陆的,发现这样很不安全,现在改为密钥登陆执行命令和上传文件,在这里做个记录,方便以后查阅。先来看一下功能:
执行命令和上传文件的步骤:
第一步:制作密钥对
首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:
这里写图片描述

第二步:在服务器上安装公钥
键入以下命令,在服务器上安装公钥:
这里写图片描述

第三步:设置 SSH,打开密钥登录功能
编辑 /etc/ssh/sshd_config 文件,进行如下设置:
这里写图片描述

第四步:将私钥下载到客户端,如这里的SecureCRT
输入Hostname,Username,选择认证方式为PublicKey公钥认证,选择刚刚下载下来的id_rsa私钥文件即可!
这里写图片描述

如果能成功登陆,说明你的密钥已经配好了,接下来就是paramiko通过密钥执行命令和传文件的代码:

# 执行命令
def exec_command(comm, hostname, username, password):
    ssh = paramiko.SSHClient()
    # 使用密钥登陆Linux
    ssh.load_system_host_keys()
    privatekey = os.path.expanduser(password)
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    key = paramiko.RSAKey.from_private_key_file(privatekey)

    ssh.connect(hostname=hostname, username=username, pkey=key)
    stdin, stdout, stderr = ssh.exec_command(comm)
    result = stdout.read() + stderr.read()
    # print(result.decode('utf-8'))
    ssh.close()
    return result
# 上传文件
def put_file(local_path, remote_path, hostname, username, password, port=22):
    ssh = paramiko.SSHClient()
    # 使用密钥登陆Linux
    ssh.load_system_host_keys()
    privatekey = os.path.expanduser(password)
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    key = paramiko.RSAKey.from_private_key_file(privatekey)
    ssh.connect(hostname=hostname, username=username, pkey=key)

    t = ssh.get_transport()
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.put(local_path, remote_path)
    sftp.close()

这个是前面生成的私钥存放地址:
这里写图片描述

我这里是定义的两个函数,调用函数的时候把对应的参数传入进行调用即可。

上面配置密钥的步骤都是是复制的langkeziju的专栏,在此感谢你的博客帮我解决了paramiko密钥登陆Linux的问题。

猜你喜欢

转载自blog.csdn.net/linxi7/article/details/76439248
今日推荐