теперь должны трудно кодировать telnet или ssh, как к автоматическому знают, использует ли он ssh или telnet, и затем решите использовать ssh или telnet
#!/usr/bin/python
import getpass
import pexpect
import sys
import os
import socket
import subprocess
ClientSocket = socket.socket()
try:
ClientSocket.connect(("remote_host", 22))
port = 22
except socket.error:
ClientSocket.connect(("remote_host", 23))
port = 23
finally:
command = "sshpass -ppassword ssh -t -t username@remote_host -p {0}".format(port).split()
subprocess.call(command)
ClientSocket.close()
Здесь мы при первой попытке что, открыт ли порт 22 (SSH) на удаленном хосте, если открытый переход к finally
сегмент, если это повышает проверку исключения, открыт ли порт 23 (Telnet) и затем переходит в finally
. В finally
сегмент мы используем sshpass
программа (необходимо установить его вручную sudo apt-get install sshpass
, если не установленный) для обеспечения пароля непосредственно в команде можно также использовать модуль paramiko Python здесь.
Проблема безопасности: Вы не должны давать свой пароль как простой текст.
Этот вопрос о переполнении стека может enlight Ваша проблема, просто адаптировать код к Вашим потребностям. Например:
import socket
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if sck.connect_ex(('some_host_name_or_ip', 23)) == 0:
## Telnet is open do telnet related stuff here
sck.close()
sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if sck.connect_ex(('some_host_name_or_ip', 22)) == 0:
# SSH is open do ssh related stuff here
sck.close()