def exec_command(self, command, bufsize=-1):
#print "Executing Command: "+command
chan = self._transport.open_session()
chan.exec_command(command)
stdin = chan.makefile('wb', bufsize)
stdout = chan.makefile('rb', bufsize)
stderr = chan.makefile_stderr('rb', bufsize)
return stdin, stdout, stderr
При выполнении команды в paramiko она всегда сбрасывает сеанс при запуске exec_command. Я хочу иметь возможность выполнять sudo или su и при этом иметь эти привилегии при запуске другой команды exec_command. Другой пример - это попытка выполнить exec_command ("cd /"), а затем снова запустить exec_command и поместить ее в корневой каталог. Я знаю, что вы можете сделать что-то вроде exec_command ("cd /; ls -l"), но мне нужно делать это в отдельных вызовах функций.
Можно выполнить весь файл сценария Bash для лучшего использования, вот код для этого:
import paramiko
hostname = "192.168.1.101"
username = "test"
password = "abc123"
# initialize the SSH client
client = paramiko.SSHClient()
# add to known hosts
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
client.connect(hostname=hostname, username=username, password=password)
except:
print("[!] Cannot connect to the SSH Server")
exit()
# read the BASH script content from the file
bash_script = open("script.sh").read()
# execute the BASH script
stdin, stdout, stderr = client.exec_command(bash_script)
# read the standard output and print it
print(stdout.read().decode())
# print errors if there are any
err = stderr.read().decode()
if err:
print(err)
# close the connection
client.close()
Это выполнит локальное script.sh
файл на удаленном 192.168.1.101
машина Linux.
script.sh
(просто пример):
cd Desktop
mkdir test_folder
cd test_folder
echo "$PATH" > path.txt
Это учебное руководство объясняет это подробно: , Как Выполнить Команды Bash в Удаленной Машине в Python .