Просто выполните следующие действия:
alter table TABLE_NAME (COLUMN_NAME DATA_TYPE);
В конце таблицы будет добавлен новый столбец
Я передам вам paramiko
см. этот вопрос
ssh = paramiko.SSHClient()
ssh.connect(server, username=username, password=password)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd_to_execute)
Или вы можете просто использовать commands.getstatusoutput :
commands.getstatusoutput("ssh machine 1 'your script'")
Я использовал его широко и отлично работает.
В Python 2.6+, используйте subprocess.check_output
.
Я использовал paramiko связку (nice) и pxssh (также приятно). Я бы тоже порекомендовал. Они работают несколько иначе, но имеют относительно большое перекрытие в использовании.
Все уже заявили (рекомендуется) с помощью paramiko, и я просто использую код python (API, который можно сказать), который позволит вам выполнять несколько команд за один раз.
для выполнения команд на разных Использование узла: Commands().run_cmd(host_ip, list_of_commands)
Вы увидите один TODO, который я сохранил, чтобы остановить выполнение, если какая-либо из команд не выполнена, я не знаю, как это сделать. пожалуйста, поделитесь своими знаниями
blockquote>#!/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:])
Спасибо!
Посмотрите на spurplus
, обертку, которую мы разработали вокруг spur
, которая предоставляет аннотации типов и некоторые незначительные трюки (повторное подключение SFTP, md5 и т. д. .): https: // pypi.org/project/spurplus/
Я нашел 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"])
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
spur
, по-видимому, работает только в системах unix, потому что он имеет зависимость от termios
. Кто-нибудь знает хорошую библиотеку для Windows?
– Gabriel
5 June 2013 в 02:25
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.
ssh.load_system_host_keys()
. – alfonso 14 September 2016 в 19:23k = paramiko.RSAKey.from_private_key_file(keyfilename)
ИЛИk = paramiko.DSSKey.from_private_key_file(keyfilename)
THENssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
и, наконец,ssh..connect(hostname=host, username=user, pkey=k)
. – Crossfit_and_Beer 20 April 2017 в 14:21def run_cmd(host, cmd):
, который сначала делает то, что вы хотите, но ваши потребности развиваются. Вы в конечном итоге меняете помощника для нового варианта использования, что изменяет поведение старого существующего использования. Планируйте соответственно. – Crossfit_and_Beer 20 April 2017 в 14:27