скрипт для автоматизации scp в сети

У меня есть сеть, полная машин Linux. В этой сети у меня есть пользователь user1 с паролем как пароль на всех машинах.

У меня есть следующий скрипт для размещения файлов в домашнем каталоге user1 на всех компьютерах сети.

#!/usr/bin/expect -f # connect via scp spawn cat /home/user1/Desktop/IPlistfile.txt | while read line do spawn scp /home/user1/Desktop/filetobesent.txt user1@${line}:/home/user1/Desktop ####################### expect { -re ".*es.*o.*" { exp_send "yes\r" exp_continue } -re ".*sword.*" { exp_send "password\r" } } interact done 

Проблема в том, что я получаю сообщение об ошибке как « can't read line. No such variable ». Однако, если я использую IP-адрес непосредственно вместо переменной строки, я могу передать файл.

Изменить : IPlistfile.txt содержит список IP-адресов в моей сети. Каждая строка содержит один IP-адрес.

2 Solutions collect form web for “скрипт для автоматизации scp в сети”

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

1. Настройте доступ к вашим компьютерам без пароля.

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

Сначала создайте общедоступный ключ ssh на вашем компьютере:

 ssh-keygen -t rsa 

Вам будет предложено ввести ключевую фразу, которую вам будет предложено ввести при первом запуске любой команды ssh после каждого входа. Это означает, что для нескольких команд ssh или scp вам нужно будет только ввести его один раз. Тем не менее, вы можете оставить его пустым, чтобы иметь полностью свободный от доступа доступ.

После того, как вы создали свой открытый ключ, скопируйте его (как user1 ) на каждый компьютер в своей сети:

 while read ip; do ssh-copy-id -i ~/.ssh/id_rsa.pub user1@$ip done < IPlistfile.txt 

Вам потребуется вручную ввести пароль для каждого IP-адреса (если вы не используете одно из решений ниже для этого шага), но как только вы это сделаете, вы сможете скопировать файлы на любую из этих машин с помощью простого:

 while read ip; do scp /home/user1/Desktop/filetobesent.txt user1@$ip:~/Desktop done < IPlistfile.txt 

Если у вас установлен sshpass , вы можете автоматизировать его, поэтому вам не нужно вводить пароль для каждой машины:

 SSHPASS='password' while read ip; do sshpass -e scp /home/user1/Desktop/filetobesent.txt user1@$ip:~/Desktop done < IPlistfile.txt 

2. Установите sshpass

Это отличная небольшая программа, которая позволяет передавать пароль ssh в качестве параметра командной строки. Это, очевидно, не очень безопасное решение, и я настоятельно рекомендую вам прочитать раздел «Вопросы безопасности» в man sshpass .

В любом случае, он, вероятно, доступен в репозиториях вашего дистрибутива, в системах на базе Debian он может быть установлен с

 sudo apt-get install sshpass 

Я не могу проверить, так как у меня нет машины на базе RedHat, но насколько я могу судить по поиску здесь , она должна быть установлена ​​на Fedora с

 sudo yum install sshpass 

Как только вы его установили, вы можете просто запустить

 SSHPASS='password' while read ip; do sshpass -e scp /home/user1/Desktop/filetobesent.txt user1@$ip:~/Desktop done < IPlistfile.txt 

Параметр -e указывает sshpass чтобы получить пароль из переменной SSHPASS . Это немного более безопасно, чем предоставление его в качестве параметра с опцией -p .

ВАЖНЫЙ:

Это не удастся, если сервер, к которому вы подключаетесь, неизвестен, если его открытый ключ не хранится на вашем компьютере. Если это не работает, просто подключите один раз ( ssh или scp ) к удаленному компьютеру и примите его открытый ключ.

3. Используйте pscp вместо

pscp является альтернативой scp который принимает пароль как параметр командной строки. В системах на базе Debian это можно установить с помощью

 sudo apt-get install putty-tools 

Как я уже говорил, я не могу проверить, но он должен быть установлен на Fedora с

 sudo yum install putty 

Затем вы можете скопировать файлы с помощью

 while read ip; do pscp -pw password /home/user1/Desktop/filetobesent.txt user1@$ip:~/Desktop done < IPlistfile.txt 

Проверьте это http://www.edwardawebb.com/web-development/keys-putty-cygwin-passwordless-login-ssh-scp , у вас есть сценарий, который упростит работу на многих серверах.

  • Как я могу перейти вверх или вниз в tmux с помощью Terminal.app?
  • Почему SCP не работает, когда включена опция «RequestTTY force»?
  • Программа запускается в SSH для доступа к пульсовому звуку на машине, на которой она выполняется
  • Возможно ли иметь несколько псевдонимов хостов SSH?
  • Тюрьма в chroot в debian 7.5 - Проблема разделения привилегий
  • Как установить программное обеспечение для нескольких клиентов linux
  • Ограничить пользователей SFTP разными каталогами
  • Как передать закрытый ключ ssh через строку, а не файл?
  • Есть ли недостаток в использовании SSHFS вместо SSH?
  • Как избежать проводов awk для awk?
  • Почему команда `users` возвращает разных пользователей в зависимости от того, ssh я или открываю новый терминал?
  • Linux и Unix - лучшая ОС в мире.