mirror of
https://github.com/Kiritow/OpenComputerScripts.git
synced 2024-03-22 13:10:46 +08:00
60 lines
1.9 KiB
Lua
60 lines
1.9 KiB
Lua
|
local component=require("component")
|
||
|
|
||
|
local function myPrint(...)
|
||
|
return io.write(...)
|
||
|
end
|
||
|
|
||
|
function doRunSSH(sock)
|
||
|
local cmdLength=0
|
||
|
local cmdLengthTmpStr=""
|
||
|
local cmdLengthLeftBit=4
|
||
|
while true do
|
||
|
local s=sock.read(cmdLengthLeftBit)
|
||
|
if(s==nil) then return
|
||
|
else
|
||
|
cmdLengthTmpStr=cmdLengthTmpStr .. s
|
||
|
cmdLengthLeftBit=cmdLengthLeftBit-string.length(s)
|
||
|
if(cmdLengthLeftBit==0) then -- Receive 4B length
|
||
|
cmdLength=tonumber(cmdLengthTmpStr)
|
||
|
cmdLengthTmpStr="" -- Reset TmpStr
|
||
|
-- Start Data Receive
|
||
|
local cmdText=""
|
||
|
local done=0
|
||
|
while (done<cmdLength) do
|
||
|
s=sock.read(cmdLength-done)
|
||
|
if(s==nil) then return end-- Connection Closed.
|
||
|
done=done+string.length(s)
|
||
|
cmdText=cmdText .. s
|
||
|
end
|
||
|
-- Command received. Write to a temp file
|
||
|
-- This is because OC-Lua does not implements loadstring(). So we use dofile() instead
|
||
|
local fd=io.open("/tmp/a.lua","w")
|
||
|
fd:write(cmdText)
|
||
|
fd:close()
|
||
|
-- Replace output
|
||
|
local oldprint=print
|
||
|
print=oldprint
|
||
|
io.open("/tmp/a.txt")
|
||
|
-- Call dofile
|
||
|
dofile("/tmp/a.lua")
|
||
|
-- Switch back
|
||
|
io.close()
|
||
|
print=oldprint
|
||
|
|
||
|
-- Send Result back
|
||
|
local hand=io.open("/tmp/a.txt","r")
|
||
|
local resText=hand:read("a")
|
||
|
hand:close()
|
||
|
local resLen=tostring(string.length(resText))
|
||
|
sock.send(resLen)
|
||
|
sock.send(resText)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function runSSH(ServerIP,ServerPort)
|
||
|
local x=component.internet.connect(ServerIP,ServerPort)
|
||
|
doRunSSH(x)
|
||
|
x.close()
|
||
|
end
|