总结:python paramiko winrm
程序员文章站
2022-06-11 08:58:56
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
- 在host1上运行, ssh-keygen -t rsa,一路回车,这样会在你的用户root的目录下生成.ssh目录,里面包含了你root用户的公钥文件 id_rsa.pub和私钥文件
- id_rsa在host1上运行,ssh-copy-id root@192.168.0.2,当需要确认时,输入yes,然后紧接着输入host2的root用户密码。这句命令将会将你的公钥内容复制到host2的受信任秘钥文件authorized_keys里去。当你使用host1的私钥登陆host2时,host2会使用authorized_keys里面存储的host1公钥来进行身份验证。
- 在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