utiliser.netrc avec sftp

j'ai quelques scripts existants dans lesquels j'utilise ftp + .netrc.

je veux passer à sftp maintenant mais il semble qu'il ne supporte pas les macros / .netrc.

Est-il une autre alternative?

s'il vous Plaît aider.

16
demandé sur dlamblin 2009-09-01 09:28:22

3 réponses

simplement dit, vous ne pouvez pas utiliser .netrcsftp,scp ou ssh. Ces produits font partie de la norme OpenSSH, qui a le mot clé "secure" dans le nom. Ce n'est pas une pratique sécurisée d'automatiser les connexions de la façon

l'Autorisation

pour l'une des deux premières alternatives, vous voudrez configurer les clés et l'échange entre eux. Sur l'ordinateur que vous connectez à partir d'exécuter ssh-keygen, pour vos besoins il sera beaucoup plus simple si vous ne donnez pas à la clé une phrase de passe, bien que ce soit risqué. Vous avez maintenant deux fichiers dans .ssh/, un id_rsa et id_rsa.pub. De ces id_rsa doit être tenu secret ou sécurisé (d'où le mot de passe). Le fichier pub est en fait une ligne de texte. Cette ligne peut être ajoutée à la ~/.ssh/authorized_keys fichier du côté de l'hôte récepteur. Vous pouvez ajouter la clé au fichier manuellement; mais il y a aussi ssh-copy-id commande de raccourci qui fait justement cela, en prenant également soin des permissions de fichiers. Après avoir autorisé une clé, vous devriez être en mesure de vous connecter à partir de la machine avec la clé privée de la machine qui a la clé publique autorisée, lorsque vous vous connectez en tant qu'utilisateur approprié. Tester avec ssh -v. Si vous avez entré un mot de passe, on vous le demandera; si vous ne l'avez pas fait, vous êtes maintenant prêt à automatiser. Vous pouvez utiliser un ssh-agent maintenir active une clé privée entre les sessions seule la saisie du mot de passe une fois. Si vous réalisez plusieurs ssh hops, l'option de rediriger les agents permettra la clé privée à partir de la boîte source d'origine ssh-agent à communiquer à chaque saut. Personnellement, je trouve cela exagéré, et suggère donc de ne pas utiliser une phrase de passe.

Maintenant que vous pouvez faire ssh,sftp et scp connexions sans entrer de mot de passe ou mot de passe, vous êtes prêt à automatiser le reste.

Alternative 1,

est la solution privilégiée étiez-vous convertir votre .netrc macro vers un script shell ou un autre script appelant quelques-uns scp commandes. Ceci est similaire à l'automatisation de toutes vos connexions ftp curl ou wget. E. G.:

scp -qr $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR $LOCAL_PATH_FILE_OR_DIR #download
scp -qr $LOCAL_PATH_FILE_OR_DIR $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR #upload
scp -pqr $USER@$REMOTE_HOST:$PATH_FILE_OR_DIR $USER@$REMOTE_HOST2:$PATH_FILE_OR_DIR #mirror between separate hosts.
ssh $USER@$REMOTE_HOST chmod 644 $PATH_FILE #set permissions

la Variante 2,

en utilisant sftp comme vous l'avez mentionné, vous pouvez créer un script expects la commande, avec un fichier batch-b option, ou par des conduites commandes dans sftp. C'est un peu plus semblable à un .netrc macro, mais n'a aucun avantage sur l'alternative 1. Je vais vous montrer un exemple de ce dernier:

#!/bin/sh
echo "OK, starting now..."
sftp -b /dev/fd/0 remotehost <<EOF
cd pub
ascii
get filename.txt
bye
EOF

la Variante 3,

utiliser sftp programme qui casse la norme SSH en vous permettant de stocker des paramètres de connexion tels que le mot de passe. Par exemple, en utilisant cyberduck et AppleScript, ou FileZilla et une file d'attente.

note en Outre:

Il y a un ~/.ssh/config le fichier vous pouvez utiliser pour donner des noms d'hôtes plus courts, définir des paramètres de redirection, des répertoires par défaut, des noms d'utilisateurs par défaut, et des identités spécifiques pour chaque hôte. J'aime aussi l' -l option de scp ce qui limite mon taux de transfert à quelque chose de plus raisonnable.

P.S. on croirait qu'il existe un outil pour convertir .netrc macros aux scripts shell (alternative 1 styled). Mais je n'ai rien trouvé. Est-ce une petite occasion d'affaires de niche?

19
répondu dlamblin 2017-03-20 10:18:24

si vous pouvez utiliser une authentification sans mot de passe sur votre machine (ce qui pourrait être interdit par votre sysadmin, mais n'est généralement pas le cas), alors vous pouvez commodément utiliser scp dans un script shell plutôt que des macros .netrc. Mais si vous devez taper un mot de passe pour vous connecter à la machine distante, alors j'utiliserais le "here script" (le bit avec EOF dedans) pour faire la magie. Vous pouvez utiliser un script shell pour préparer le script ftp s'il change de temps en temps.

2
répondu Rich 2011-07-08 23:21:54

essayez de regarder scp, car vous pouvez utiliser passwordless login (touches ssh) pour faire cela.

vous pourriez être en mesure d'utiliser les mêmes techniques avec SFTP, Je ne suis pas sûr.

0
répondu Matthew Schinckel 2009-09-01 06:35:50