Подобная удару замена команды в ssh или Как запросить вещи от ssh *клиент*?

Сжатая файловая система - Другое решение состоит в том, чтобы иметь дело со сжатием слой ниже веб-сервера и файлов - на уровне файловой системы.

Я не сделал со мной, но можно испытать что-то как fusecompress - поэтому выделите Ваш www если Вы уже не имеете и делаете это сжатой какой-то фс.

Очевидно, это будет стоить Вам в некоторой производительности, но если процессор достоин, то это могло бы быть в порядке.

1
задан 17 July 2009 в 14:33
12 ответов

Вы хотите использовать, ожидают для этого. Это, вероятно, уже находится на Вашей машине. Это - стандартный инструмент для любого вида интерактивной автоматизации командной строки. Это - библиотека Tcl, таким образом, Вы получите некоторые навыки Tcl по пути бесплатно.Остерегайтесь; это захватывающе.

#!/path/to/expect
spawn ssh user@example.com "mysql -u blub"
expect "*ssword:*"
send -- "mypass\r"
interact
3
ответ дан 3 December 2019 в 16:14

Попытайтесь использовать <.

ssh user@example.com "mysql-u плач-p" <файл

Если первая строка в "файле" является Вашим паролем, это "должно" использовать это для подсказки пароля, то остальные будут использоваться для sql части.

При простом выполнении sql файла на удаленном сервере попробуйте:

ssh user@example.com "mysql-u плач-p <file.sql" <пароль

5
ответ дан 3 December 2019 в 16:14
  • 1
    Очень хороший, который работает идеально подходящий для моего примера. –  JohannesR 14 July 2009 в 17:11

Я изучал базовую проблему несколько лет назад. Я хотел инициировать загрузку SCP из сессии SSH. Как Ваша проблема, это требует коммуникации из сессии SSH назад к некоторому процессу на клиенте.

Таким образом, вот третье возможное решение: Подключение с помощью обертки вокруг SSH, который сканирует вывод SSH и инициировал определенные команды локально, когда это распознает шаблон. Это - ясно взлом, но это могло бы добиться цели.

Я закончил с измененной версией/usr/bin/script, который будет помнить мое соединение SSH (например. me@somehost), и каждый раз, когда моя ssh сессия распечатана ###/some/absulte/path/to/file/on/host.txt###, это локально выполнилось бы scp me@somehost:/some/absulte/path/to/file/on/host.txt .

Простой сценарий оболочки использовался для удобного создания шаблона и полного пути на сервере.

(Мой код на самом деле сделал немного больше: Это открыло локальный текстовый редактор на загруженном файле и повторно загрузит его с помощью SCP, когда файл был изменен. Сообщите мне, хотите ли Вы код.)

Я искал более хорошую реализацию этого с тех пор, но не нашел то до сих пор.

Возможно, эта техника могла быть реализована как команда прокси SSH (думайте connect.c) вместо обертки вокруг SSH.

2
ответ дан 3 December 2019 в 16:14
  • 1
    Isn' t, который, что ожидает, делает на самом деле? –  JohannesR 14 July 2009 в 17:13
  • 2
    Подобный патч доступен в openssh списке рассылки, исправляя это непосредственно в openssh клиентскую программу. –  JohannesR 14 July 2009 в 17:47
  • 3
    Не уверенный, ожидают ли, может просканировать для шаблонов, в то время как пользователь взаимодействует с целевым процессом. I' m не крупнейший вентилятор TCL, таким образом, я никогда не исследовал это далее. Исправление openssh двоичного файла является определенно не опцией в моей рабочей среде, но I' d нравится узнавать больше, как этот патч работает. Где я нахожу некоторую информацию об этом (кроме openssh списка рассылки, конечно)? –  otto.poellath 14 July 2009 в 18:44
  • 4
    JohannesR, я не могу найти что патч в openssh списке рассылки. What' s предмет почты объявления? Я действительно хотел бы взглянуть на него.Спасибо. –  otto.poellath 23 July 2009 в 11:40

Для этой определенной проблемы возможно, можно ли просто поместить пароль в ~/my.cnf файл на сервере?

Для Вашей идеи: необходимо использовать выход, чтобы заставить это работать:

ssh dba@db "echo \`ssh sven@192.168.2.10 \"cat echofile\" \`"

Отредактируйте снова: Вы будете neeed вход в систему без пароля от сервера до клиента, имея в виду закрытый ключ для Вашего клиентского поля на сервере, который еще менее безопасен, чем my.cnf.

1
ответ дан 3 December 2019 в 16:14
  • 1
    Право, я мог. Но затем я связал бы безопасность учетной записи Mysql в учетную запись ssh что I' m, просто стараясь избегать. –  JohannesR 10 July 2009 в 13:03
  • 2
    Hehe, право, у меня была подобная идея, но поскольку Вы упомянули себя, это не действительно практично. Мой пример является, вероятно, не лучшим, так как Вы всегда связываете обе учетных записи, в то время как Вы соединены. Если учетная запись ssh была бы поставлена под угрозу, взломщик мог бы просто соединиться с сервером в то же время, что и Вы и шпион в процесс mysql для нахождения пароля или прерывания или команд изменения отправленными на mysql сервер (с некоторым non-neglectible усилием, конечно). –  JohannesR 10 July 2009 в 17:18

Необходимо эмулировать терминальный сеанс:

ssh -t user@example.com "mysql -u blub -p"

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

1
ответ дан 3 December 2019 в 16:14
  • 1
    Это - действительное решение моего примера, но с другой стороны, сценарии об автоматизации физического труда и предотвращении интерактивности. –  JohannesR 10 July 2009 в 17:12

Необходимо было бы выполнить оболочку сначала, что-то как

ssh user@exampl.com bash -c 'mysql -u user -p$(cat /root/pass_file)'
0
ответ дан 3 December 2019 в 16:14
  • 1
    Это doesn' t справка, потому что это читает пароль сначала и затем соединяется с ssh сервером и называет удар с простым паролем, который является вещью I' m старающийся избегать. –  JohannesR 10 July 2009 в 13:07
  • 2
    О, я просто выяснил, Вы хотите считать файл из локальный машина... Единственный механизм, о котором я могу думать, который старается не иметь простой пароль в cmdline, через stdin, но Вам, очевидно, нужен он для взаимодействия с mysql. Попытайтесь передать сокет mysql локальной машине по ssh, затем соединитесь с ним (передача TCP более проста, чем сокет Unix, но последний может быть сделан также после перехода через несколько обручей как socat). Я чувствую, соответствовал, чтобы сказать, что, вероятно, необходимо предпринять шаги назад и заново продумать то, что Вам нужно так черное волшебство, избегаются. –  rpetre 10 July 2009 в 13:40

Вы используете ssh вместо telnet но все еще отправьте пароль посредством команды, чтобы быть свободно выполненными на удаленной машине в открытом тексте (видимый на a ps список там).

Прочитанный эта статья SecurityFocus о MySQL Securing.

0
ответ дан 3 December 2019 в 16:14
  • 1
    Право, это было моим беспокойством. Таким образом, каково решение? –  JohannesR 10 July 2009 в 17:11

Хорошо, я думаю, что могу с некоторой уверенностью говорить, что, что Вы wan't, чтобы сделать не возможны общим способом, существуют только обходные решения для этого, которые зависят от фактической проблемы, которую Вы хотите решить.

Думая об этом немного больше, я решил бы "проблему в качестве примера", Вы дали просто путем выполнения перенаправления портов через ssh от клиента к серверу и затем использования локального mysql клиента с локальным my.cnf, который на самом деле является способом, которым я всегда работаю с mysql.

0
ответ дан 3 December 2019 в 16:14

Вы могли использовать переменные среды на своей локальной машине. Это открыло бы безопасность vulnerbilities, если кто-то на Вашей локальной машине видит Вашу среду. и любой на сервере видит пароль.

PASSWORD=$(cat pass-file) ssh user@example.com "mysql -u blub -p$PASSWORD"
0
ответ дан 3 December 2019 в 16:14
  • 1
    That' s не решение, потому что пароль покажут в простом тексте на списке процессов на удаленном сервере. –  JohannesR 17 July 2009 в 14:29

Я думаю при помощи одинарных кавычек, значение для переменной среды будет принято от удаленной машины. Таким образом, можно установить PASSWORD=value в .bashrc на удаленной машине. Затем на Вашей локальной машине выполненный ssh user@example.com '. ~/.bashrc; mysql-u-p$PASSWORD плача'

0
ответ дан 3 December 2019 в 16:14
  • 1
    Спасибо за это предложение. У меня не было бы файла с паролем на удаленном конце... –  JohannesR 21 July 2009 в 13:25

Установить sshpass (yum install)

sshpass -p password ssh user@host.com

Если вы не хотите беспокоиться о ключах отпечатков пальцев, добавьте

sshpass -p password ssh -o StrictHostKeyChecking = no user@host.com

0
ответ дан 3 December 2019 в 16:14

Вы можете заставить bash интерпретировать параметр как команду и загрузить ваш пароль перед его отправкой по SSH

MY_PASSWORD=abcde ssh user@example.com `echo mysql -p$MY_PASSWORD`
0
ответ дан 3 December 2019 в 16:14

Теги

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