Bash: управление SSH

У меня есть этот файл bash, который запрашивает IP, пароль и т. д. для OpenSSH для устройства.

Теперь, если я использую ssh root@ip, мне нужно ввести пароль. Это действительно раздражает. Во-вторых; я не могу позволить моему сценарию отправлять ему команды.

Это то, что я хочу->

  1. Дело не в пароле; я уже нашел кое-что; но он говорит мне, что команды не найдены?:

    #!/usr/bin/expect -f

    spawn ssh root@$IPADDR

    expect "password:"

    sleep 1

    send "$rpass\r"

    1. Я хочу, чтобы пользователь мог видеть некоторые меню, из которых он может выбирать; после этого; каждая команда делается для него. Так типа новое окно или что-то в этом роде?

    2. Я не хочу использовать: -Любой внешний материал -Без дополнительного редактирования соединения SSH

ИНФОРМАЦИЯ О BASH: GNU Bash, выпуск версии 4.0.33(1) (i486-pc-linux-gnu), работающий на Linux Mint. Но он должен быть доступен для нескольких дистрибутивов Linux, а также для Mac?


person Deniz Zoeteman    schedule 17.12.2009    source источник
comment
Дубликат: stackoverflow.com/questions/1449932   -  person ephemient    schedule 19.12.2009


Ответы (8)


Много инструментов, чтобы пойти на многое, чтобы предотвратить то, что вы делаете. Я рекомендую использовать открытые ключи ssh для решения этой проблемы вместо паролей.

Большой альтернативой является написание собственного модифицированного ssh-клиента на основе открытого исходного кода, чтобы взять под контроль управление паролями.

А, ну, я забыл. Вы, вероятно, можете перехитрить это с помощью pty, так как тогда /dev/tty будет тем, что вы контролируете. Ожидание может помочь вам в этом.

person bmargulies    schedule 17.12.2009
comment
как я уже сказал: No extra editing of the SSH connection; включая открытые ключи. - person Deniz Zoeteman; 17.12.2009
comment
Я мог бы начать редактировать ssh-клиент, но это займет некоторое время. Спасибо за предложение. - person Deniz Zoeteman; 18.12.2009

Правильный способ сделать это без хранения паролей в открытом виде на вашем компьютере — с помощью ssh. Первый забег:

ssh-keygen

Это создаст новый ключ SSH в ~/.ssh/id_rsa.pub. После этого просто запустите:

ssh-копия-id [email protected]

Если вы работаете в OS X или на другом компьютере, на котором нет «ssh-copy-id», есть однострочные альтернативы, такие как этот:

кошка ~/.ssh/id_rsa.pub | ssh user@machine "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

В конечном итоге вам просто нужно добавить содержимое ~/.ssh/id_rsa.pub на вашем локальном компьютере к ~/.ssh/authorized_keys на удаленном сервере. Как вы это сделаете, зависит от вас, вышеперечисленное — это просто быстрые способы сделать это.

person Chev    schedule 30.01.2014

Expect — это обычный инструмент для автоматизации интерактивных сеансов.

person Dennis Williamson    schedule 17.12.2009
comment
Я уже дал это в своем вопросе, но у меня нет икры и отправки. Теперь мне действительно нужно скачать их, положить в свою папку? Такой суровый. - person Deniz Zoeteman; 18.12.2009
comment
Это ожидаемые команды, вы запускаете скрипт через expect, да? - person Daniel Bruce; 18.12.2009
comment
Spawn и send — это команды, которые expect распознает. Это не отдельные загрузки. Вам нужно убедиться, что путь к expect указан правильно для вашей системы в файле shebang. Вы также, вероятно, захотите использовать команду interact в своем сценарии expect. - person Dennis Williamson; 18.12.2009
comment
как я могу использовать expect как что-то, чем можно поделиться с другими? - person Deniz Zoeteman; 18.12.2009

Правильный способ — скопировать ключи, как было сказано здесь. Чтобы добавить что-то к разговору, есть случаи, когда sshpass может пригодиться.

Вопрос касается конкретно сценариев в системе с SSH. Если это разработка встроенной системы, может быть полезно объединить sshpass с параметрами командной строки, как написано в этом посте.

sshpass -p raspberry ssh [email protected]

это можно сочетать с

ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

чтобы избежать подтверждающих вопросов, которые препятствуют выполнению сценария.

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

https://ownyourbits.com/2017/02/22/easy-passwordless-ssh-with-sshh/

person nachoparker    schedule 01.03.2017

Используйте ssh-keygen для создания открытого ключа для вашего компьютера, затем скопируйте свой локальный ~/.ssh/id_rsa.pub или ~/.ssh/identity.pub на удаленную систему в ~/.ssh/authorized_keys.

Возможно, вам придется ужесточить права доступа к файлу author_keys: chmod 600.

person Nick Dixon    schedule 17.12.2009

Рассматривали ли вы Парамико? Это Python-библиотека для взаимодействия с SSH.

person Alex Brasetvik    schedule 17.12.2009
comment
Могу ли я взаимодействовать с ним через bash? - person Deniz Zoeteman; 18.12.2009
comment
Зависит от того, что ты хочешь. Если бы вы предоставили более подробную информацию о том, какую проблему вы на самом деле пытаетесь решить, вам было бы легче помочь. - person Alex Brasetvik; 18.12.2009
comment
Что я пытаюсь сделать, так это использовать bash для создания своего рода ssh-клиента. Мне очень нравится эта идея Paramiko; но что мне нужно сделать, так это взаимодействовать с bash. Код написан на bash, и я хочу, чтобы он оставался таким. я не знаю Python; я начинающий программист. В любом случае; то, что я хочу сделать, похоже (почти) на все, что возможно с ssh; пароль как в paramiko, перейдите в директорию; редактирование разрешений; удаление файлов/папок; создание папок; копирование файлов/папок с ПК на Устройство; и т.п. - person Deniz Zoeteman; 18.12.2009
comment
Расширенный Necropost: Pexpect, особенно pxssh, pexpect.sourceforge.net/pxssh.html выполняет свою работу . - person K Zombro; 16.09.2016

Даже если бы я использовал для этого ключи pem, а это старая тема, я также хотел бы процитировать sshpass

person Tom    schedule 31.08.2015

Вы можете использовать этот скрипт: https://github.com/aprey10/ssh-authorizer

Это также позволяет пропустить запрос парольной фразы ключей ssh.

person Andrew Preizner    schedule 29.09.2019