不使用sshpass,sshkeys可以通过任何方式对远程计算机执行ssh并仅通过lua脚本提供密码,还可以在sshing之后在远程计算机的后台运行shell命令。 执行os.execute('ssh user@192.168.14.81')后如何自动获取密码
答案 0 :(得分:0)
该功能不应该那样使用。实际上,os.execute
和io.popen
并不是要完全使用。它们是准系统命令,适用于您需要执行本不应该以这种方式工作但确实需要执行的操作。
它们都基于标准C库,没有太多可用。出于安全原因,ssh正在以某种不太标准的方式处理与用户的交互。通常,您将不得不使用非标准库,例如luaposix,或附加一些C ++库以进行系统交互。
关于ssh,有python库parallel-ssh
。较旧的版本通过难看的输出解析来完成任务,较新的版本似乎重新实现了整个协议。有了足够的欲望,就有可能利用lua的那些。或者只是使用python完成任务。
对于与进程进行lua交互的特殊性,您可以尝试使用此代码(将其放入文件中,如果尝试将其粘贴到终端中将阻塞标准输入)
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()