如何在 lua 脚本中自动提供远程机器的 ssh 密码

在不使用 sshpass、sshkeys 的情况下,有没有办法通过 lua 脚本 ssh 到远程机器并仅通过 lua 脚本提供密码。还要在 ssh 到远程机器后在后台运行 shell 命令。 我该如何在执行 os.execute('ssh user@192.168.14.81') 后自动获取密码

点赞
用户4687565
用户4687565

那个函数不应该像那样使用。os.executeio.popen 实际上都不应该被使用。它们只是当你需要做一些不应该这样工作但你真的需要的事情时使用的最基本的命令。

它们都基于标准的 C 库,没有什么可以提供的。而且出于安全原因,ssh 是以一种不太标准的方式处理与用户之间的交互。通常你需要使用非标准的库,如 luaposix,或者连接一些用于系统交互的 C++ 库。

关于 ssh,有一个 Python 库 parallel-ssh。旧版通过丑陋的输出解析来实现它们的功能,新版似乎重新实现了整个协议。只要有足够的意愿,就可以在 lua 中使用这些库。或者直接使用 Python 来完成任务。

至于 lua 与进程交互的特殊性,您可以尝试这段代码(将其放入文件中,以免在终端中粘贴时阻塞 stdin):

f=io.popen([[
    echo "this will show only on f:read";
    echo "now here's your line";
    read var; echo $var
]]);
print('this will print before bash command finishes, now type something');
f:write('This will be ignored completely')
print(f:read('*a'));
print('This will print after the bash command');
f:close()
2018-08-01 12:42:51