Я довольно новичок в Linux и Paramiko, но проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я пытаюсь изменить оболочку, зависает удаленный сеанс Paramiko.
Удаленный хост по умолчанию /etc/csh
Я запускаю различные скрипты, некоторые требуют csh
, а другие требуют bash
. Любой из моих сценариев, работающих в csh
, работает правильно, поскольку удаленный хост по умолчанию находится в csh
.
Для запуска других скриптов мне нужно быть в bash
.
Всякий раз, когда я пытаюсь изменить оболочку, используя bash
или /bin/bash
, соединение paramiko просто зависает. Я использую следующую команду для проверки оболочек до подключения и после попытки временно изменить оболочку, чтобы увидеть, что работает, но ничего не происходит. Это использует Paramiko и Python 3.6.5 .
Примечание: это также не помогает; если я по умолчанию установлю удаленный хост bash
, он не сможет переключиться на csh
main.py
connection = SSH.SSH(hostname, username, password)
connection.changeShell('echo $0 ; echo $shell; /bin/bash ; echo $shell ; echo $0')
Это также было опробовано как bash
и chsh
SSH.py
class SSH:
client = None
def __init__(self, address, username, password):
print("Login info sent.")
print("Connecting to server.")
self.client = client.SSHClient() # Create a new SSH client
self.client.set_missing_host_key_policy(client.AutoAddPolicy())
self.client.connect(address, username=username,
password=password, look_for_keys=False) # connect
def changeShell(self, command):
print("Sending your command")
# Check in connection is made previously
if (self.client):
stdin, stdout, stderr = self.client.exec_command(command)
while not stdout.channel.exit_status_ready():
# Print stdout data when available
if stdout.channel.recv_ready():
# Retrieve the first 1024 bytes
alldata = stdout.channel.recv(2048)
while stdout.channel.recv_ready():
# Retrieve the next 1024 bytes
alldata += stdout.channel.recv(2048)
# Print as string with utf8 encoding
print(str(alldata, "utf8"))
stdin.close()
stdout.close()
stderr.close()
else:
print("Connection not opened.")