Python os.mkdir 即使在使用 Paramiko 连接到 SSH 服务器后,仍然会在本地创建文件夹

Python os.mkdir still creates folders locally even after connecting to SSH server using Paramiko

脚本的原理是它应该通过SSH连接从一个虚拟机连接到另一个虚拟机并生成一定数量的文件夹。 脚本运行,但执行时会在主机上生成文件夹。

import os
from paramiko import SSHClient, AutoAddPolicy
from sys import argv
 
address = argv[1]
port = int(argv[2])
name = argv[3]
path = argv[4]
prefix = argv[5]
counts = int(argv[6])
mode = int(argv[7])
 
def generateFolders(path, prefix, counts, mode):
   for i in range(1, counts+1):
       folderName = prefix + str(i)
       pth = os.path.join(os.path.expanduser('~'), path, folderName)
       os.mkdir(pth, mode)
 
 
command = generateFolders(path, prefix, counts, mode)
 
print(address)
client1 = SSHClient()
client1.set_missing_host_key_policy(AutoAddPolicy())
client1.connect(address, username=name, password='1')
stdin, stdout, stderr = client1.exec_command(command)
 
print(stdout.read())
 
client1.close()

终端中的命令

但是没有脚本,我可以连接到另一个虚拟机

Jane,它在您的本地机器上制作目录,因为那是 python 脚本 运行ning.

的地方

我建议你看看这个question and answer.

在那个 QandA 中,他们展示了如何在本地机器上使用 ssh 在远程机器上执行命令。您可以使用现有代码作为远程盒子上的 运行 代码,使用上面的代码作为指导。

特别是这个 this one

os.mkdir 在本地计算机上创建文件夹。它不会神奇地开始在远程机器上工作,只是因为你之前打开了到该机器的 SSH 连接(实际上你甚至没有,因为你只在调用 os.mkdir 后才打开它)。

要通过 Paramiko 模块在远程计算机上创建文件夹,请使用 SFTPClient.mkdir

sftp = client1.open_sftp()

for i in range(1, counts+1):
    folderName = prefix + str(i)
    pth = os.path.join(os.path.expanduser('~'), path, folderName)
    sftp.mkdir(pth, mode)

尽管您不应在 SFTP 路径上使用 os.path,因为您的代码会中断,但如果 运行 在 Windows 和其他平台上,则不会使用 / 作为路径分隔符。而 os.path.expanduser 当然会扩展 ~ 到本地用户家。我不认为你想要那样。


强制性警告:请勿单独使用 AutoAddPolicy – 您正在失去针对 MITM attacks by doing so. For a correct solution, see Paramiko "Unknown Server".

的保护