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

来源:互联网 发布:战舰世界淘宝商城 编辑:程序博客网 时间:2024/05/29 13:06

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

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

第三步:设置 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的问题。

阅读全文
0 0
原创粉丝点击