Windows下Python实现SSH不用输密码

由于工作需要经常通过ssh(python脚本实现)连接下载文件,但又不是批量下载,就是一天大概要下载几十个甚至可能会更多,每一次下载就要输两次密码,耗费大量时间,还经常输错,于是在网上找ssh不用输密码的方案试图去绕过这个步骤。网上大部分ssh免密的都是类似sshpass这种,但是这个东西在Windows下使用比较复杂,我看了一个多小时都看不明白到底怎么样才能在Windows下使用,反正就工具安装之类的步骤比较复杂,不能简单的实现。我通过python的pynput模块的函数模拟人输入键盘符号实现了不用手工输密码。

我的设计方案如下:首先,python实现一个函数来建立ssh连接,然后通过另一个函数模拟人操控键盘输入密码和回车等字符。这两个函数通过threading模块去生成两个线程去执行,就能实现在启动ssh连接后在光标处输入密码。

核心代码如下(已脱敏):

import sys
import subprocess
import time
import threading
from pynput.keyboard import Key, Controller as c_keyboard
def password(): #输密码,模拟人按键,输入点为光标处
    keyboard = c_keyboard()
    lista = ['p','a','s','s','w','o','r','d','@','0','3'] #密码为password@03
    for i in range(2):#我下载需要输两次密码所以是循环两次
        time.sleep(1) #不sleep 好像也行
        for item in lista:
            keyboard.press(item)
            keyboard.release(item)
        keyboard.press(Key.enter)#回车
        keyboard.release(Key.enter)
def ssh(): #发起ssh请求
    path = sys.argv[1]
    cmd = '''C:\\Windows\\System32\\OpenSSH\\scp.exe   -o ProxyJump=xianxian@192.168.1.2:1111 xianxian@192.168.1.1:{} .'''.format(path)
    subprocess.call(cmd, shell=True)
    apk_path = path.split("/")[-1]
    print("安装 {} 中..".format(apk_path))
def main():#两个进程先后调用两个函数,实现了ssh进程调用过程中输入密码。
    threads = []
    thread_ssh = threading.Thread(target=ssh)
    thread_pass = threading.Thread(target=password)
    threads.append(thread_ssh)
    threads.append(thread_pass)
    for t in threads:
        t.start()

main()

然后使用的话就能实现不用输密码了,我的小伙伴也在用我的脚本,好有成就感呀!!!

 

posted @ 2022-08-02 20:45  一点也不咸  阅读(825)  评论(0)    收藏  举报