欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

总结:python paramiko winrm

程序员文章站 2023-11-10 10:03:16
paramiko之前使用过paramiko连接过linux机器,做过文件传输。做一个总结首先两台或多台主机需要实现免密登录:假设host1 ip:192.168.0.1, host2 ip:192.168.0.2在host1上运行, ssh-keygen -t rsa,一路回车,这样会在你的用户root的目录下生成.ssh目录,里面包含了你root用户的公钥文件 id_rsa.pub和私钥文件id_rsa在host1上运行,ssh-copy-id root@192.168.0.2,当需要确...

paramiko

paramiko模块是一个比较强大的ssh连接模块,之前使用过paramiko连接过linux机器,下面是一个demo,用于判断远程机器是否有某文件:

方法一:
import paramiko

def ssh_file_isexist(app_kind, file_key, is_exist):
    # 创建SSH对象
    ssh = paramiko.SSHClient()

    # 允许连接不在know_hosts文件中的主机
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    # 连接服务器,hostname为IP地址,username、password为服务器的账号密码
    ssh.connect(hostname='', port=22, username='', password='')

    # 创建一个sftp会话,返回一个基于当前连接的sftp对象,用于进行文件的上传操作
    sftp_client = ssh.open_sftp()

    # 降序排列文件
    ssh.exec_command('ls -t')

    file_ = sftp_client.listdir("/data/ccloud-host-volume/app/edgelink/staticv2/%s" % app_kind)

    # is_exist=1   判断文件存在
    if is_exist:
        if file_key in file_:
            return True

    # is_exist=0   判断文件不存在
    else:
        if file_key not in file_:
            return True

    ssh.close()
方法二:

我没试过,网上搜集的资料


import paramiko
t = paramiko.Transport(("主机","端口"))
t.connect(username = "用户名", password = "口令")
#t.connect(username = "用户名", password = "口令", hostkey="密钥")    #主机需要密钥


如何用Paramiko实现互信主机间的文件传输

首先
两台或多台主机需要实现免密登录:
假设host1 ip:192.168.0.1, host2 ip:192.168.0.2

  1. 在host1上运行, ssh-keygen -t rsa,一路回车,这样会在你的用户root的目录下生成.ssh目录,里面包含了你root用户的公钥文件 id_rsa.pub和私钥文件
  2. id_rsa在host1上运行,ssh-copy-id root@192.168.0.2,当需要确认时,输入yes,然后紧接着输入host2的root用户密码。这句命令将会将你的公钥内容复制到host2的受信任秘钥文件authorized_keys里去。当你使用host1的私钥登陆host2时,host2会使用authorized_keys里面存储的host1公钥来进行身份验证。
  3. 在host1运行 ssh root@192.168.0.2,如果没有任何报错,就证明你已经可以让host1免密码登陆host2了。

(使用exit退出host2的登陆,会回到host1)

接着,在host1上面安装paramiko库,
pip install paramiko -y
然后创建一个Python文件 ,内容如下


import paramiko

if __name__ == "__main__":
    remote_host = '192.168.0.2'
    ssh_port = 22
    user_name = 'root'

    # 加载RSA私钥
    private_key_file = '/root/.ssh/id_rsa'
    key = paramiko.RSAKey.from_private_key_file(private_key_file)

    # 上传文件到远程主机
    t = paramiko.Transport((remote_host, ssh_port))
    t.connect(username=user_name, pkey=key)
    sftp = paramiko.SFTPClient.from_transport(t)
    # 上传当前目录下的文件到远程主机的/root/目录下
    # 也可以直接指定绝对路径
    sftp.put("test.txt", "test.txt")
    t.close()


winrm

winrm是windows服务器远程执行命令,
下面给一个demo;

wintest = winrm.Session('http://{}:{}/wsman'.format(ip,port),auth=(device_user,device_pass))
res = wintest.run_cmd('star.exe')
print(res.std_err,res.std_out)

不过,这个库使用的时候,需要待连接设备开启:winrm服务

如下:

 1、查看winrm服务是否启动
winrm enumerate winrm/config/listener # 没有返回值,代表没启动 2、winrm服务进行基础配置
winrm quickconfig                       成功后会返回一些参数,如果报错:此计算机的网络类型之一为公用...,去设置网络连接为专有选择y,n  点击y 3、查看winrm lintener
winrm e winrm/config/listener         返回端口号、协议等一些参数 4、配置authwinrm set winrm/config/service/auth @{Basic="true"} 5、为winrm service 配置加密方式为允许非加密
winrm set winrm/config/service @{AllowUnencrypted="true"} 6、再查看是否启动
winrm enumerate winrm/config/listener 7、授权指定ip
winrm s winrm/config/Client @{TrustedHosts="172.*"} # 通过该命令授权可以连接到此机器的IP 

本文地址:https://blog.csdn.net/baidu_37964071/article/details/109036483

相关标签: python