脚本的原理是,它应该通过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()终端中的命令

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

发布于 2022-01-29 19:35:46
发布于 2022-01-29 21:35:46
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,因为您的代码会中断,但如果在/和其他平台上运行,则不使用/作为路径分隔符。当然,os.path.expanduser将把~扩展到本地用户主页。我觉得你不想那样。
强制性警告:不要单独使用AutoAddPolicy --这样做将失去对https://en.wikipedia.org/wiki/Man-in-the-middle_attack的保护。有关正确的解决方案,请参见https://stackoverflow.com/q/10670217/850848#43093883。
https://stackoverflow.com/questions/70908734
复制相似问题