Это способ передать пароль в & ldquo; & rdquo; через скрипт python? [Дубликат]

Просто выполните следующие действия:

  alter table TABLE_NAME (COLUMN_NAME DATA_TYPE);   

В конце таблицы будет добавлен новый столбец

87
задан fredley 27 August 2010 в 17:09
поделиться

7 ответов

Я передам вам paramiko

см. этот вопрос

ssh = paramiko.SSHClient()
ssh.connect(server, username=username, password=password)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd_to_execute)
129
ответ дан Community 17 August 2018 в 09:11
поделиться
  • 1
    Предположение здесь состоит в том, что paramiko столь же безопасен, как (открытый) ssh. Это? – user239558 24 February 2015 в 10:09
  • 2
    Что делать, если ssh-ключи обмениваются? – Ardit 9 May 2016 в 10:24
  • 3
    @ R-Dit, для ключей ssh, попробуйте избавиться от параметра пароля и выполнить следующую команду перед подключением: ssh.load_system_host_keys(). – alfonso 14 September 2016 в 19:23
  • 4
    Если вы используете SSH-ключи, сначала подготовьте ключевой файл, используя EITHER: k = paramiko.RSAKey.from_private_key_file(keyfilename) ИЛИ k = paramiko.DSSKey.from_private_key_file(keyfilename) THEN ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) и, наконец, ssh..connect(hostname=host, username=user, pkey=k). – Crossfit_and_Beer 20 April 2017 в 14:21
  • 5
    Будучи долговременным пользователем Paramiko (но не экспертом), я могу предложить использовать Paramiko, но вы должны рассмотреть свои варианты использования и то, насколько вы готовы учиться. Парамико очень низкоуровневый, и вы можете легко попасть в ловушку, где вы создаете «команду, выполняющую вспомогательную функцию» & quot; без полного понимания кода, который вы используете. Это означает, что вы можете спроектировать, скажем, def run_cmd(host, cmd):, который сначала делает то, что вы хотите, но ваши потребности развиваются. Вы в конечном итоге меняете помощника для нового варианта использования, что изменяет поведение старого существующего использования. Планируйте соответственно. – Crossfit_and_Beer 20 April 2017 в 14:27

Или вы можете просто использовать commands.getstatusoutput :

   commands.getstatusoutput("ssh machine 1 'your script'")

Я использовал его широко и отлично работает.

В Python 2.6+, используйте subprocess.check_output .

36
ответ дан Cees Timmerman 17 August 2018 в 09:11
поделиться
  • 1
    +1 для простого простого встроенного метода. В моей текущей настройке я не хочу добавлять библиотеки Python, поэтому ваше предложение ценно, очень просто. – Philip Kearns 26 November 2013 в 11:26
  • 2
    просто убедитесь, что ваш удаленный хост настроен для без пароля ssh, если нет, вам нужно делать другие вещи для управления аутентификацией – powerrox 17 June 2014 в 22:12
  • 3
    subprocess.check_output - отличное решение! – Tim S. 8 September 2015 в 21:52
  • 4
    @powerrox, что это такие "другие вещи? & quot; – ealeon 30 November 2015 в 06:45
  • 5
    @TimS. вам может потребоваться включить обработку для проверки подлинности любыми способами, подходящими для вашей установки. Я использовал для ввода пароля в командной строке. то есть эта нить с другими решениями: unix.stackexchange.com/questions/147329/… – powerrox 1 December 2015 в 17:22

Я использовал paramiko связку (nice) и pxssh (также приятно). Я бы тоже порекомендовал. Они работают несколько иначе, но имеют относительно большое перекрытие в использовании.

3
ответ дан Eric Snow 17 August 2018 в 09:11
поделиться
  • 1
    Ссылка на pxssh - приятное путешествие назад во времени. – Oben Sonne 3 February 2014 в 21:48

Все уже заявили (рекомендуется) с помощью paramiko, и я просто использую код python (API, который можно сказать), который позволит вам выполнять несколько команд за один раз.

для выполнения команд на разных Использование узла: Commands().run_cmd(host_ip, list_of_commands)

Вы увидите один TODO, который я сохранил, чтобы остановить выполнение, если какая-либо из команд не выполнена, я не знаю, как это сделать. пожалуйста, поделитесь своими знаниями

#!/usr/bin/python

import os
import sys
import select
import paramiko
import time


class Commands:
    def __init__(self, retry_time=0):
        self.retry_time = retry_time
        pass

    def run_cmd(self, host_ip, cmd_list):
        i = 0
        while True:
        # print("Trying to connect to %s (%i/%i)" % (self.host, i, self.retry_time))
        try:
            ssh = paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            ssh.connect(host_ip)
            break
        except paramiko.AuthenticationException:
            print("Authentication failed when connecting to %s" % host_ip)
            sys.exit(1)
        except:
            print("Could not SSH to %s, waiting for it to start" % host_ip)
            i += 1
            time.sleep(2)

        # If we could not connect within time limit
        if i >= self.retry_time:
            print("Could not connect to %s. Giving up" % host_ip)
            sys.exit(1)
        # After connection is successful
        # Send the command
        for command in cmd_list:
            # print command
            print "> " + command
            # execute commands
            stdin, stdout, stderr = ssh.exec_command(command)
            # TODO() : if an error is thrown, stop further rules and revert back changes
            # Wait for the command to terminate
            while not stdout.channel.exit_status_ready():
                # Only print data if there is data to read in the channel
                if stdout.channel.recv_ready():
                    rl, wl, xl = select.select([ stdout.channel ], [ ], [ ], 0.0)
                    if len(rl) > 0:
                        tmp = stdout.channel.recv(1024)
                        output = tmp.decode()
                        print output

        # Close SSH connection
        ssh.close()
        return

def main(args=None):
    if args is None:
        print "arguments expected"
    else:
        # args = {'<ip_address>', <list_of_commands>}
        mytest = Commands()
        mytest.run_cmd(host_ip=args[0], cmd_list=args[1])
    return


if __name__ == "__main__":
    main(sys.argv[1:])

Спасибо!

4
ответ дан IAmSurajBobade 17 August 2018 в 09:11
поделиться

Посмотрите на spurplus, обертку, которую мы разработали вокруг spur, которая предоставляет аннотации типов и некоторые незначительные трюки (повторное подключение SFTP, md5 и т. д. .): https: // pypi.org/project/spurplus/

0
ответ дан Marko Ristin 17 August 2018 в 09:11
поделиться

Я нашел paramiko слишком низкоуровневым, а Fabric не особенно хорошо подходит для использования в качестве библиотеки, поэтому я собрал свою собственную библиотеку под названием spur , которая использует paramiko для реализации немного более удобный интерфейс:

import spur

shell = spur.SshShell(hostname="localhost", username="bob", password="password1")
result = shell.run(["echo", "-n", "hello"])
print result.output # prints hello

Если вам нужно запустить внутри оболочки:

shell.run(["sh", "-c", "echo -n hello"])
13
ответ дан Michael Williamson 17 August 2018 в 09:11
поделиться
  • 1
    Я решил попробовать spur. Вы генерируете дополнительные команды оболочки, и в итоге вы получаете: which 'mkdir' & gt; / dev / null 2 ​​& amp; 1; echo $ ?; exec 'mkdir' '-p' '/ data / rpmupdate / 20130207142923'. Я также хотел бы иметь доступ к простой exec_command. Также отсутствует возможность запуска фоновых задач: nohup ./bin/rpmbuildpackages < /dev/null >& /dev/null &. Например, я генерирую zsh-скрипт (rpmbuildpackages) с использованием шаблона, а затем я просто оставил его на машине. Возможно, умение контролировать такие фоновые задания также было бы неплохо (сохранение PID в ~ ~ / .spur). – davidlt 7 February 2013 в 15:55
  • 2
    spur, по-видимому, работает только в системах unix, потому что он имеет зависимость от termios . Кто-нибудь знает хорошую библиотеку для Windows? – Gabriel 5 June 2013 в 02:25
  • 3
    Не совсем верно: если вы используете предварительно скомпилированный установщик , вы сможете установить paramiko и spur. Я просто сделал это сам ... – ravemir 12 March 2014 в 18:58
  • 4
    @Gabriel: один из последних выпусков должен иметь улучшенную поддержку в Windows. Если он все еще не работает, не стесняйтесь открывать проблему. – Michael Williamson 25 August 2014 в 15:02
  • 5
    @davidlt: при создании SshShell теперь есть возможность установить тип оболочки. Если минимальная оболочка используется при передаче в shell_type=spur.ssh.ShellTypes.minimal, то отправляется только сырая команда. Внедрение фоновых задач напрямую ощущается немного из-за возможности Spur, но вы должны иметь возможность запускать описанную вами команду, вызывая оболочку, например. shell.run(["sh", "-c", "nohup ./bin/rpmbuildpackages < /dev/null >& /dev/null &"]). – Michael Williamson 25 August 2014 в 15:04

Вы видели Ткань ? Это позволяет вам делать всевозможные удаленные вещи поверх SSH с помощью python.

24
ответ дан supersighs 17 August 2018 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: