#bash #expect
Вопрос:
этот скрипт позволяет мне подключиться к удаленному серверу. Я хочу преобразовать его для подключения к шести удаленным серверам, чтобы иметь возможность загружать данные с этих серверов. Кто-нибудь может дать мне направление.
#!/usr/bin/expect
set username "username"
set password "password"
set hosts "hostname"
spawn ssh $username@$hosts
expect "$username@$hosts's password:"
send -- "$passwordn"
expect "$password"
sleep 20
send -- "exitn"
Комментарии:
1. Вы хотите, чтобы он был параллельным или соединялся 1 после другого, все в порядке? Если серийный номер в порядке, вы можете создать массив с шестью IP-адресами, а затем просмотреть их во время выполнения кода, который у вас уже есть
2. Привет @abhishek phukan, я хочу, чтобы это было параллельно
3. Почему вы используете expect?
4. Привет @KamilCuk, ожидание позволяет мне автоматически отвечать на вопросы, когда мне нужно ввести пароль или какие-либо другие вещи.
5. Для параллельного выполнения вы можете использовать gnu.org/software/parallel . Это должно помочь
Ответ №1:
- Привет, пока не могу прокомментировать, поэтому я отвечу здесь.
- Во-первых, если подключение требуется по умолчанию (каждый раз, когда ваша машина включена), рекомендуется использовать службу автоматической синхронизации.
- вы можете найти пример и руководство по сервису autossh здесь Пример autosshExample
- после написания этой службы вы можете запустить ее с параметром systemctl ServiceName.service.
- служба позволит машине автоматически запускать службу при ее включении.
- Другой способ решения этой проблемы ( примитивный, но работающий) — это:
- создайте сценарий, который запускает другие сценарии.
- создайте сценарий для каждого сервера, а затем сценарий для запуска всех сценариев: (используйте путь к сценарию, чтобы выполнить их один за другим).
#/bin/bash!
/usr/local/sbin/./scriptOne
sleep 10
/usr/local/sbin/./scriptTwo
sleep 10
/usr/local/sbin/./scriptThree
- Для параллельного запуска ssh вы можете использовать эти параметры:
- запустите сценарии из основного сценария с помощью amp;
- например
/usr/local/sbin/scriptOne amp;amp; /usr/local/sbin/scriptTwo
- поскольку это служба ssh, вам следует использовать флаг, чтобы не открывать новый терминал, и запускать процесс в фоновом режиме, чтобы избежать ошибок.
- используйте флаги-f-n в сценариях вашего ssh, чтобы избежать открытия новых окон терминала.
- это должно позволить вам запускать несколько процессов ssh из одних и тех же окон терминала, отправляя каждую команду и процесс для запуска в фоновом режиме.
- также обратите внимание, что использование ssh-ключей вместо пароля обеспечивает большую безопасность.
Комментарии:
1. Привет @CrazyTux, по умолчанию подключение не требуется. Я хочу его выполнить, я хочу, чтобы он был параллельным .
2. я отредактировал свой ответ, вы можете запустить несколько ssh из одного сценария параллельно. Если что-то не понятно, я здесь, чтобы помочь
3. отправив команду в фоновом режиме , вы не сможете правильно отследить ее позже
4. @abhishekphukan ну , вы можете найти команду с
pgrep -a ssh
помощью, тогда вы получите полную команду и PID, если единственное, чего хочет Джастин, — это иметь доступ к серверам, которые должны работать, но это правда, что есть больше способов справиться с этой проблемой.5. @JustinCoulibaly я все еще рекомендую создать службу ssh или autossh, тогда вы могли бы запустить соединение с помощью команды
systemctl start/stop serviceName.service
.Это самый чистый и лучший способ, о котором я могу подумать, чтобы решить эту проблему.