查看“Paramiko的使用”的源代码
←
Paramiko的使用
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==Paramiko的使用== ===在线安装=== pip3 install paramiko pip会自动安装Paramiko所依赖的包。 ===离线安装=== 如果要离线安装,则先使用pip下载。 <nowiki>mkdir paramiko && cd paramiko #创建一个目录存放安装包 pip download paramiko #下载到paramiko中,并传输至离线环境 pip install paramiko –no-index -f paramiko #离线环境下在目录paramiko中检索安装包</nowiki> 思考: *SecureRT怎么使用? *SecureFX怎么使用? ==SSHClient方式登录== ===基于用户名和密码的SSHClient方式登录=== 编程步骤如下: (1)初始化一个SSHClient类的实例。 (2)调用connect方法连接远程主机。 (3)执行命令获取输出结果和返回值,关闭连接。 <nowiki># -*- coding: utf-8 -*- # File Name: paramiko_user_pwd.py # Description: 使用用户名密码来登陆并执行远程命令 import paramiko # 建立一个sshclient对象 ssh = paramiko.SSHClient() # 将信任的主机自动加入到host_allow列表,须放在connect方法前面 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 调用connect方法连接服务器 ssh.connect(hostname="192.168.1.3", port=22, username="root", password="000000") # 执行命令 stdin, stdout, stderr = ssh.exec_command("echo `date` && df -hl") # 结果放到stdout中,如果有错误将放到stderr中 print(stdout.read().decode('utf-8')) # returncode = stdout.channel.recv_exit_status() print("returncode:",returncode) # 关闭连接 ssh.close()</nowiki> 运行结果: [root@localhost op]# python3 paramiko_user_pwd.py <nowiki>Sat May 23 16:26:31 CST 2020 Filesystem Size Used Avail Use% Mounted on devtmpfs 979M 0 979M 0% /dev tmpfs 991M 0 991M 0% /dev/shm tmpfs 991M 9.6M 981M 1% /run tmpfs 991M 0 991M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.3G 15G 14% / /dev/sda1 1014M 139M 876M 14% /boot tmpfs 199M 0 199M 0% /run/user/0 returncode: 0</nowiki> 本方法是传统的连接服务器、执行命令、关闭一个操作,有时候需要登录上服务器执行多个操作,如执行命令、上传/下载文件,该方法则无法实现。 ===基于公钥密钥的SSHClient方式登录=== 有些场景下,两台主机已经做过SSH授信,此时不需要密码即可登录。例如,若主机A不需要密码即可登录主机B执行命令,则在主机A上使用paramiko时只需要指定A的公钥路径即可。 ====生成私钥公钥对==== 使用ssh-keygen生成私钥公钥对,一直输入回车即可 [root@localhost op]# ssh-keygen <nowiki> Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:jmj7JU89ntQezYCa6BSL269a6YOIxpNdlcMF3Ni6nNE root@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ | ..= | | o + | | . = | | B E . | | + S . . | | + @ + . + | |..o.=.O * + o o | |.=.o.O.= o + . | |. . +o*+o o . | +----[SHA256]-----+ </nowiki> ====将公钥推送到远端服务器上==== 查看生成的公钥,cat /root/.ssh/id_rsa.pub 目的是验证该文件是否存在和格式是否正确 一般后面会把主机名带上,检查好格式 输出: <nowiki>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCccmWiXD7bAJ9Qhwcvc8a40cm6USaDBXZRGLnyYrTRy4TRhj6cnjSCC3i9agZYrDbLcII3aX9myXUf+KSMbVPcjJ/6d6tpu16Iyi2PN+X7rXL0LbOHpaZ4MNTtm+UMFMnvmf2LlEMg7pnBBbMz5RCYblB2xrTsUQC/2N91NVPyuPltZAbImLnefhCUBJmNvkwQZFpKyxACn/TpB/WO+0xcylg4/HyQGEC9Jvny7G2CrcuNZZyWWE5PBk433slJ7FTcGu+JuqVnAfpE1qpd7Y8+jtLphE6fWamYOvnBEIJgCLzxlJmvOW1p/grUTaJ4BKkeP1f6sncfZWoAJZP8Ex7R root@localhost.localdomain</nowiki> 将公钥推送到远端服务器上 ssh-copy-id -i ~/.ssh/id_rsa.pub 10.0.0.32 第一次需要验证密码: <nowiki>/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '10.0.0.32 (10.0.0.32)' can't be established. ECDSA key fingerprint is SHA256:i02Bc0iO8z6mp3BcZc6nNAjBowdF16KWaXdNEu7tUr0. ECDSA key fingerprint is MD5:d9:fb:c9:a0:37:4d:b7:bc:e9:81:b1:27:ab:15:b5:67. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@10.0.0.32's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh '10.0.0.32'" and check to make sure that only the key(s) you wanted were added.</nowiki> 出现“wanted were added”说明添加成功了 现在我们验证一下: ssh -l root 10.0.0.33 就可以从当前机器远程访问主机,输入命令exit退出。 附:windows 生成密钥的方法: 从官网或国内镜像 下载安装git,https://npm.taobao.org/mirrors/git-for-windows/ 安装好之后,可以通过 git --version 来测试git是否安装成功。 <nowiki>C:\Users\maxin>git --version git version 2.28.0.windows.1</nowiki> 随后打开cmd,在其中使用: ssh-keygen -t rsa <nowiki>C:\Users\maxin>ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (C:\Users\maxin/.ssh/id_rsa): Created directory 'C:\Users\maxin/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in C:\Users\maxin/.ssh/id_rsa. Your public key has been saved in C:\Users\maxin/.ssh/id_rsa.pub. The key fingerprint is: SHA256:7Ip2HoPhUjiJ7dHJH9rEIZboskFOtS9YI4u0Rf7yvTo maxin@LAPTOP-28C3GCM7 The key's randomart image is: +---[RSA 2048]----+ | o | | +... | | =.*+ . | |*+B*++ o | |==Bo*o+ S | | = =+B.o | |. o +.=.. | | ..E.+. | | ..+=. | +----[SHA256]-----+</nowiki> ====基于公钥密钥远程登陆==== python文件: <nowiki># -*- coding: utf-8 -*- #Time: 2018/8/23 22:28:37 #Description: 实现公钥登陆 #File Name: sshclient_public_key.py import paramiko # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,提供password参数即可,如无则不提供 pkey = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') #建立连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='10.0.0.32', port=22, username='root', pkey=pkey) # 执行命令 stdin, stdout, stderr = ssh.exec_command('echo `date` && df -hl') # 输出 print(stdout.read().decode('utf-8')) # 关闭连接 ssh.close()</nowiki> [root@localhost op]# python3 sshclicent_public_key.py <nowiki>Fri Jun 5 09:46:31 CST 2020 Filesystem Size Used Avail Use% Mounted on devtmpfs 979M 0 979M 0% /dev tmpfs 991M 0 991M 0% /dev/shm tmpfs 991M 9.7M 981M 1% /run tmpfs 991M 0 991M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.3G 15G 14% / /dev/sda1 1014M 139M 876M 14% /boot tmpfs 199M 0 199M 0% /run/user/0</nowiki> ==SFTPClient方式登录== ===使用sftp上传文件(基于用户名和密码)=== <nowiki>import paramiko #获取Transport实例 tran = paramiko.Transport("10.0.0.32",22) #连接SSH服务端 tran.connect(username = "root", password = "000000") #获取SFTP实例 sftp = paramiko.SFTPClient.from_transport(tran) #设置上传的本地/远程文件路径 localpath="123.txt" ##本地文件路径 remotepath="/opt/123.txt" ##上传对象保存的文件路径 #执行上传动作 sftp.put(localpath,remotepath) tran.close()</nowiki> ===使用sftp下载文件(基于用户名和密码)=== <nowiki> import paramiko #获取Transport实例 tran = paramiko.Transport("10.0.0.32",22) #连接SSH服务端 tran.connect(username = "root", password = "000000") #获取SFTP实例 sftp = paramiko.SFTPClient.from_transport(tran) #设置上传的本地/远程文件路径 localpath="456.txt" ##本地文件路径 remotepath="/opt/456.txt" ##下载对象保存的文件路径 #执行下载动作 sftp.get(remotepath,localpath) tran.close() </nowiki> ===基于公钥的上传=== <nowiki># -*- coding: utf-8 -*- #Time: 2018/8/23 22:28:37 #Description: 实现公钥登陆 #File Name: transport_public_key.py import paramiko # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,提供password参数即可,如无 则不提供 pkey = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') #建立连接 tran = paramiko.Transport(('10.0.0.32',22)) tran.connect(username='root',pkey=pkey) #获取SFTP实例 sftp = paramiko.SFTPClient.from_transport(tran) #设置上传的本地/远程文件路径 localpath="123.txt" ##本地文件路径 remotepath="/opt/789.txt" ##上传对象保存的文件路径 #执行上传动作 sftp.put(localpath,remotepath) # 关闭连接 tran.close() </nowiki> ===基于公钥的下载=== <nowiki> # -*- coding: utf-8 -*- #Time: 2018/8/23 22:28:37 #Description: 实现公钥登陆 #File Name: transport_public_key.py import paramiko # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,提供password参数即可,如无 #则不提供 pkey = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') #建立连接 tran = paramiko.Transport(('10.0.0.32',22)) tran.connect(username='root',pkey=pkey) #获取SFTP实例 sftp = paramiko.SFTPClient.from_transport(tran) #设置上传的本地/远程文件路径 localpath="012.txt" ##本地文件路径 remotepath="/opt/789.txt" ##下载对象保存的文件路径 #执行下载动作 sftp.get(remotepath,localpath) # 关闭连接 tran.close() </nowiki> 参考文档:https://www.cnblogs.com/xiao-apple36/p/9144092.html https://developer.51cto.com/art/201910/604700.htm
返回至
Paramiko的使用
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息