Автор Тема: Подключение к серверу altlinux по ssh через библиотеку paramiko  (Прочитано 5447 раз)

Оффлайн ArtemS

  • Начинающий
  • *
  • Сообщений: 3
Добрый день,

Мне необходимо удаленно подключиться к серверу Altlinux и попасть в определенную директорию доступ к которой можно получить только через su. В директории необходимо пробежаться по паре каталогов и проверить некоторые файлы. Всё это нужно автоматизировать.

Я решил прибегнуть к библиотеке paramiko на яп Python, так как знаком с языком.

Собственно столкнулся с проблемой получения прав su.

Мой код:

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, username=user, password=password, port=port)

stdin, stdout, stderr = ssh.exec_command("uptime")
stdin.flush()
result = stdout.read().splitlines()
print(result)

stdin, stdout, stderr = ssh.exec_command('su')
stdin.write(password + "\n")
stdin.flush()
result = stdout.read().splitlines()
print(result)

stdin, stdout, stderr = ssh.exec_command('ls /var/lib/nxserver/db')
stdin.flush()
result = stdout.read().splitlines()
print(result)

ssh.close()

Первая команда выполняется правильно, но дальше я пытаюсь получить права su и перейти в искомый каталог к которому обычный пользователь доступа не имеет. В итоге вместо списка содержимого каталога db выводит пустую строку.

Пробовал и такой вариант:

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(...)

channel = сlient.get_transport().open_session()
channel.get_pty()
channel.settimeout(5)
channel.exec_command('su')
channel.send(password+'\n')
channel.exec_command('ls /var/lib/nxserver/db')
print channel.recv(1024)

channel.close()
client.close()

Тоже не прокатывает, выводит значение пароля почему-то.

Собственно может кто-то подсказать, помочь в решении данной задачи?

Пока буду своими силами пытаться побороть эту проблему.

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 535

Оффлайн aleksey-v.

  • Завсегдатай
  • *
  • Сообщений: 347
Почему именно su, а не sudo?
У sudo очень гибкая конфигурация.

А уже если упростить работу su, то можно добавить определнного пользователя в группу wheel.
Затем добавить поддержку wheel в файл /etc/pam.d/su.

В нём уже есть закомментированная строка:

auth           sufficient      pam_wheel.so debug use_uid group=wheel trust


У меня и другие вопросы есть. Зачем использовать пароли для ssh? Для таких задач используют ssh keys.

Оффлайн berkut_174

  • Мастер
  • ***
  • Сообщений: 7 147
    • Email
sudo -Hiu root ls /var/lib/nxserver/db
Сноси Винду, переходи на Линукс ! :)

Оффлайн ArtemS

  • Начинающий
  • *
  • Сообщений: 3
Если через sudo ввожу команды, запрашивается пароль, ввожу его, но выдает сообщение (см. скриншот). А если su, то при вводе того же самого пароля учетка переходит в режим суперпользователя.

Может есть какой-то способ сделать, чтоб sudo нормально заработало?


Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 1 041
  • ITS
Не знаю на сколько это правильно в смысле "энергозатрат", но может быть примонтировать каталог, поправить текст и отмонтироваться?
https://ru.wikipedia.org/wiki/SSHFS

Оффлайн andrew_b

  • Завсегдатай
  • *
  • Сообщений: 535
Если через sudo ввожу команды, запрашивается пароль, ввожу его, но выдает сообщение (см. скриншот). А если su, то при вводе того же самого пароля учетка переходит в режим суперпользователя.
su требует пароль рута. sudo требует пароль пользователя.
Может есть какой-то способ сделать, чтоб sudo нормально заработало?
Настроить sudo. Это единственный способ.

Оффлайн aleksey-v.

  • Завсегдатай
  • *
  • Сообщений: 347
Так и не понял, права суперпользователя root на удалённой машине нужны или нет?

Оффлайн ArtemS

  • Начинающий
  • *
  • Сообщений: 3
Так и не понял, права суперпользователя root на удалённой машине нужны или нет?

Да, на удаленной. Нужны чтоб попасть мне в необходимый каталог, где нужно изменить файлы.

Не знаю на сколько это правильно в смысле "энергозатрат", но может быть примонтировать каталог, поправить текст и отмонтироваться?
https://ru.wikipedia.org/wiki/SSHFS

Дело в том что скрипт будет крутиться на другом сервере и вызываться n раз в сутки.

Настроить sudo. Это единственный способ.

Я так понял нужно отредактировать какой-то файл? Может подскажите, как дать возможность админу выполнять команды из-под sudo.

Оффлайн aleksey-v.

  • Завсегдатай
  • *
  • Сообщений: 347
Чтобы отредактировать файл не удалённой машине не всегда root нужен.
Если к файлу-каталогу есть правда на изменение у конкретной группы или пользователя, то и root не нужен.

По-прежнему убеждён, что для правильной настройки ssh не следует использовать пароли, ключи лучше подходят.