远程命令执行之 paramiko

目的:
自动化测试脚本服务器非自动化手机执行服务器时,当需要执行 adb 命令时,可采用 paramiko 连接远程电脑(远程电脑为 mac 系统)

步骤 1:
脚本执行环境安装 paramiko
执行 pip 命令安装 paramiko 包:pip install paramiko

步骤 2:
远程电脑生成 sshkey:
1、电脑终端,输入:ls -al ~/.ssh
2、情况 1,终端出现文件 id_rsa.pub 或 id_dsa.pub ,表示该电脑已经存在 SSH Key,此时可继续输入命令:
pbcopy < ~/.ssh/id_rsa.pub

情况 2,如果未出现 id_rsa.pub 或 id_dsa.pub 文件,表示该电脑还未配置 SSH Key ,输入如下命令:
ssh-keygen -t rsa -C "your_email@example.com"
连续回车并输入密码
再输入命令:ls -al ~/.ssh, 出现 id_rsa.pub 和 id_dsa.pub 两个文件表示 ok,然后再输入 pbcopy < ~/.ssh/id_rsa.pub

3、配置远程电脑的交互 shell 执行全局变量

zsh 终端执行方式:
执行命令:open ~/.bashrc(如果 open 文件不存在,使用 touch ~/.bashhrc),将以下环境变量添加至环境变量文件中
export ANDROID_HOME=/Users/liuyuhang/Library/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
执行命令:source ~/.bashhrc,生效环境变量
参考文档:https://blog.csdn.net/clear_to_/article/details/120965680

bash 终端执行方式:
执行命令:open ~/.zshenv(如果 open 文件不存在,使用 touch ~/.zshenv),将以下环境变量添加至环境变量文件中
export ANDROID_HOME=/Users/liuyuhang/Library/Android/sdk
export PATH=${PATH}:${ANDROID_HOME}/tools
export PATH=${PATH}:${ANDROID_HOME}/platform-tools
执行命令:source ~/.zshenv,生效环境变量
参考文档:https://blog.csdn.net/weixin_42682982/article/details/120745729https://blog.csdn.net/whitehack/article/details/51705889

步骤 3:
脚本实现方式

import paramiko
def ssh():
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())    #指定当对方主机没有本机公钥的情况时应该怎么办,AutoAddPolicy表示自动在对方主机保存下本机的秘钥
    ssh.connect('10.*.*.*", 22, '*", '*")    #SSH端口默认22,可改
    stdin,stdout,stderr = ssh.exec_command("adb -s S*************04 shell am start -a android.settings.BLUETOOTH_SETTINGS")    #这三个得到的都是类文件对象
    outmsg,errmsg = stdout.read(), stderr.read()    #读一次之后,stdout和stderr里就没有内容了,所以一定要用变量把它们带的信息给保存下来,否则read一次之后就没有了
    print(outmsg.decode())
    print(errmsg)
    if errmsg == "":
        print(outmsg)
    ssh.close()


if __name__ == '__main__':
    ssh()

END

远程命令执行之 winrm
winrm 是 windows 服务器远程执行命令,paramiko 则是用于 linux 和 mac
使用条件:待连接设备开启 winrm 服务

import winrm
@staticmethod
def close_ie_process(ip, user, pd):
  """
  使用远程命令关闭已开启的IE浏览器及driver进程
  :param ip: ip
  :param user: 用户
  :param pd: 密码
  :return:
  """
  # 连接windows
  win = winrm.Session(ip, auth=(user, pd))
  # 依次执行列表中的每条命令,并打印出结果
  cmd_list = ["taskkill /F /im iexplore.exe", "taskkill /F /im IEDriverServer.exe"]
  for cmd in cmd_list:
      cmd_result = win.run_cmd(f"{cmd}")
      print(str(cmd_result))
      time.sleep(1)


↙↙↙阅读原文可查看相关链接,并与作者交流