GNU/Linux >> Znalost Linux >  >> Linux

Ssh – skript pro automatizaci SCp v síti?

Mám síť plnou linuxových strojů. V této síti mám uživatele jako uživatel1 s heslem jako heslo ve všech strojích.

Mám následující skript k umístění souborů do domovského adresáře user1 ve všech počítačích v síti.

#!/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 [email protected]${line}:/home/user1/Desktop
#######################
expect {
-re ".*es.*o.*" {
exp_send "yesr"
exp_continue
}
-re ".*sword.*" {
exp_send "passwordr"
}
}
interact
done

Problém je v tom, že se mi zobrazuje chybová zpráva „can't read line. No such variable “. Pokud však místo proměnné řádku použiji přímo IP adresu, jsem schopen přenést soubor.

Upravit :Soubor IPlistfile.txt obsahuje seznam IP adres v mé síti. Každý řádek obsahuje jednu IP adresu.

Přijatá odpověď:

Napadá mě několik způsobů, jak to udělat, ale velmi doporučuji nastavit ssh bez hesla přístup, poděkujete mi později.

1. Nastavte přístup ke svým počítačům bez hesla.

Toto je zdaleka nejlepší metoda, protože se budete chtít znovu připojit ke strojům, což vám výrazně usnadní život. Je také mnohem, mnohem bezpečnější než ostatní možnosti, i když se rozhodnete použít prázdnou přístupovou frázi, protože nebudete házet hesla nezašifrovaná.

Nejprve vytvořte veřejný ssh klíč na vašem počítači:

ssh-keygen -t rsa

Budete požádáni o heslo, které budete požádáni o zadání prvního čas, kdy po každém přihlášení spustíte jakýkoli příkaz ssh. To znamená, že pro více ssh nebo scp příkazy, budete jej muset zadat pouze jednou. Můžete jej však nechat prázdné, abyste měli přístup zcela bez hesla.

Jakmile vygenerujete svůj veřejný klíč, zkopírujte jej (jako user1 ) ke každému počítači ve vaší síti:

while read ip; do 
 ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$ip 
done < IPlistfile.txt

Budete muset ručně zadat heslo pro každou IP (pokud pro tento krok nepoužijete jedno z níže uvedených řešení), ale jakmile to uděláte, budete moci kopírovat soubory na kterýkoli z těchto počítačů pomocí jednoduchého:

while read ip; do
  scp /home/user1/Desktop/filetobesent.txt [email protected]$ip:~/Desktop
done < IPlistfile.txt

Pokud máte sshpass nainstalován, můžete to automatizovat, takže nemusíte zadávat heslo pro každý počítač:

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

2. Nainstalujte sshpass

Toto je šikovný malý program, který vám umožní předat ssh heslo jako parametr příkazového řádku. Toto zjevně není příliš bezpečné řešení a vřele doporučuji, abyste si přečetli část „Bezpečnostní otázky“ man sshpass .

Každopádně je pravděpodobně k dispozici v repozitářích vaší distribuce, na systémech založených na Debianu jej lze nainstalovat pomocí

sudo apt-get install sshpass

Nemohu to zkontrolovat, protože nemám stroj založený na RedHat, ale pokud mohu zjistit z vyhledávání zde, měl by být instalovatelný na Fedoru pomocí

sudo yum install sshpass

Jakmile jej nainstalujete, můžete jednoduše spustit

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

-e volba říká sshpass získat heslo z SSHPASS variabilní. Je to o něco bezpečnější, než když to dáváte jako parametr pomocí -p možnost.

Související:SSH a oprávnění k domovskému adresáři?

DŮLEŽITÉ:

To se tiše nezdaří, pokud je server, ke kterému se připojujete, neznámý, pokud jeho veřejný klíč není uložen ve vašem počítači. Pokud se vám zdá, že to nefunguje, stačí se připojit jednou (ssh nebo scp ) ke vzdálenému počítači a přijměte jeho veřejný klíč.

3. Použijte pscp místo

pscp je alternativou k scp který přijímá heslo jako parametr příkazového řádku. Na systémech založených na Debianu to lze nainstalovat pomocí

sudo apt-get install putty-tools

Jak jsem řekl dříve, nemohu to zkontrolovat, ale mělo by být možné nainstalovat na Fedoru pomocí

sudo yum install putty

Soubory pak můžete zkopírovat pomocí

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

Linux
  1. Ssh – Omezení uživatele Ssh/scp/sftp na adresář?

  2. Ssh – předávání hesel do skriptu?

  3. Ssh – Scp přes více hostitelů?

  1. Jak Scp přes střední stroj?

  2. 11 Užitečné příkazy „ssh“ a „scp“ v Linuxu

  3. Skript uživatelských dat (cloud-init) se na EC2 nespouští

  1. Jak zkopírovat výstup terminálu?

  2. Použití scp s předávaným ssh agentem

  3. Spuštění více vláken scp současně