2013-02-05 3 views
0

J'ai deux besoin de ligne répéter faire en bouclerépétition Shell exécuter ssh et commande scp

ssh [email protected] mkdir -p $location 
scp -r $i [email protected]:$location 

, mais chaque fois qu'il a besoin de mot de passe d'entrée, comment puis-je modifier le code alors juste besoin d'entrée une ou plusieurs fois voie rapide

+2

'ssh-copy-id' possible? – Kent

+0

j'aime rsync :) – ajreal

+0

comment puis-je changer ces deux lignes en utilisant rsync? – Jessesiu

Répondre

1

Vous pouvez utiliser la méthode de génération de clé publique/privée en utilisant ssh-keygen (https://help.ubuntu.com/community/SSH/OpenSSH/Keys) Ensuite, utilisez le script ci-dessous.

for VARIABLE in dir1 dir2 dir3 
do 
ssh [email protected] mkdir -p $location 
scp -r $i [email protected]:$location 
done 

Autre solution: Vous pouvez utiliser sshpass

for VARIABLE in dir1 dir2 dir3 
do 
ssh [email protected] mkdir -p $location sshpass -p '<password>' <command> 
scp -r $i [email protected]:$location sshpass -p '<password>' <command> 
done 
+0

S'il vous plaît noter que la première méthode ci-dessus est ** hautement ** préférable (ou, même, le seul que vous devez utiliser): le 2ème peut faire apparaître le mot de passe à tout le monde sur le système (via 'ps'). Et le premier devrait avoir la clé privée seulement lisible par l'utilisateur et personne d'autre ne devrait pouvoir l'obtenir. –

0

Alors que les clés publiques/privées est l'option la plus facile, sans besoin de changer le script existant, il y a une autre option, d'utiliser sshfs. sshfs ne peut pas être installé par défaut.

Avec cette approche, vous avez essentiellement mount le système de fichiers distant vers un répertoire local, via le protocole ssh. Ensuite, vous pouvez simplement utiliser des commandes comme mkdir/cp etc.

NOTE: Ces commandes sont de votre système & pas de système distant.

Le montage sur ssh est une tâche ponctuelle qui nécessite votre intervention manuelle. Faites-le avant d'exécuter le script.
par exemple. pour votre cas:

mkdir /tmp/tam_192.168.174.43 
sshfs [email protected]:/ /tmp/tam_192.168.174.43 
[email protected]'s password: <ENTER PASSWORD HERE> 

& puis, dans votre script, utilisez des commandes simples comme:

mkdir -p /tmp/tam_192.168.174.43/$location 
cp -r $i /tmp/tam_192.168.174.43/$location 

& pour démonter:

fusermount -u /tmp/tam_192.168.174.43 
Questions connexes