60 lines
2.0 KiB
Python
60 lines
2.0 KiB
Python
import paramiko
|
|
import time
|
|
|
|
client = paramiko.SSHClient()
|
|
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
client.connect('192.168.100.2', username='mi4', password='m14', look_for_keys=False, allow_agent=False)
|
|
|
|
def run(cmd, wait=1.0):
|
|
time.sleep(wait)
|
|
stdin, stdout, stderr = client.exec_command(cmd)
|
|
time.sleep(1.0)
|
|
out = stdout.read().decode().strip()
|
|
err = stderr.read().decode().strip()
|
|
if err:
|
|
print(f" ERR: {err[:200]}")
|
|
return out
|
|
|
|
def esc_for_routeros(s):
|
|
return s.replace('"', '\\"').replace('$', '\\$').replace('\\', '\\\\')
|
|
|
|
# Test: simple script creation via exec_command
|
|
print("=== Test: script create via exec_command ===")
|
|
test_code = ':put "test123"'
|
|
esc_test = esc_for_routeros(test_code)
|
|
print(f"Escaped: {esc_test}")
|
|
|
|
result = run(f'/system script add name=test_esc source="{esc_test}"')
|
|
print(f"Create result: '{result}'")
|
|
|
|
result = run(':put [/system script get test_esc source]')
|
|
print(f"Stored source: '{result}'")
|
|
|
|
run('/system script remove test_esc')
|
|
print()
|
|
|
|
if 'test123' not in result:
|
|
print("Script creation NOT working! Debugging further...")
|
|
# Try a simpler approach: no special chars at all
|
|
result2 = run('/system script add name=test2 source=":put hello"')
|
|
print(f"Simple create: '{result2}'")
|
|
result2 = run(':put [/system script get test2 source]')
|
|
print(f"Simple source: '{result2}'")
|
|
run('/system script remove test2')
|
|
|
|
# Try without quotes
|
|
result3 = run('/system script add name=test3 source="hello"')
|
|
print(f"Min create: '{result3}'")
|
|
result3 = run(':put [/system script get test3 source]')
|
|
print(f"Min source: '{result3}'")
|
|
run('/system script remove test3')
|
|
|
|
# Try with just a dollar sign
|
|
result4 = run('/system script add name=test4 source=":put \\$x"')
|
|
print(f"$ create: '{result4}'")
|
|
result4 = run(':put [/system script get test4 source]')
|
|
print(f"$ source: '{result4}'")
|
|
run('/system script remove test4')
|
|
|
|
client.close()
|