Итак, вместо того, чтобы открыть терминал, я запустил его в фоновом режиме, используя подпроцесс, как предложено @dstromberg. Сначала я хотел использовать терминальный подход, потому что соединение S SH требовало ответа да / нет для добавления отпечатков пальцев, а затем и пароля. В конце концов, соединение S SH не использовало порт по умолчанию.
Однако все это возможно с использованием подпроцесса. Сначала вам нужно установить sshpass
, используя
sudo apt-get install sshpass
Затем
import subprocess
command = ['sshpass', '-p', 'imnottellingyou', 'ssh', '-oStrictHostKeyChecking=accept-new', '-4', '-N', '-L', '55:localhost:55', 'toing@localhost', '-p', '654',]
proc = subprocess.Popen(command, close_fds=True)
# now do whatever you want (the code, please)
А затем сделайте свое дело, а затем, когда вы захотите убить переадресацию портов:
proc.kill()
Поскольку kill () не работает иногда , вы также можете попробовать:
import signal
import os
p_id = os.getpgid(proc.pid)
os.killpg(p_id, signal.SIGTERM)
Что касается опции -4 в S SH, она заставляет IPv4. И вуаля! Нет необходимости в сложном фоновом терминале.