Comment passer mot de passe à scp?
je sais qu'il n'est pas recommandé, mais est-il possible de passer de l'utilisateur mot de passe à la scp?
j'aimerais copier un fichier via scp dans le cadre d'un travail par lots et le serveur de réception a bien sûr besoin d'un mot de passe et, Non, Je ne peux pas facilement le changer en Authentification par clé.
14 réponses
Use sshpass :
sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path
ou alors le mot de passe n'apparaît pas dans l'histoire de bash
sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path
le contenu ci-dessus copie le chemin de l'hôte distant vers votre local.
Installation :
- ubuntu / debian
-
apt install sshpass
-
- centos / fedora
-
yum install sshpass
-
- mac w / macports
-
port install sshpass
-
- mac w/ infusion
-
brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
-
il suffit de générer une clé ssh comme:
ssh-keygen -t rsa -C "your_email@youremail.com"
copier le contenu de ~/.ssh/id_rsa.pub
et enfin l'Ajouter aux machines distantes ~/.ssh/authorized_keys
assurez-vous que la machine distante ont les permissions 0700 for ~./ssh folder
et 0600 for ~/.ssh/authorized_keys
si vous vous connectez au serveur depuis Windows, la version Putty de scp ("pscp") vous permet de passer le mot de passe avec le paramètre -pw
.
vous pouvez utiliser le script' expect 'sur unix / terminal""
Par exemple créer de test.exp':
#!/usr/bin/expect
spawn scp /usr/bin/file.txt root@<ServerLocation>:/home
set pass "Your_Password"
expect {
password: {send "$pass\r"; exp_continue}
}
exécuter le script
expect test.exp
j'espère que ça aidera.
Voici un exemple de la façon dont vous le faites avec expect
outil:
sub copyover {
$scp=Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}
+/$file");
$scp->expect(30,"ssword: ") || die "Never got password prompt from
+ $dest:$!\n";
print $scp 'password' . "\n";
$scp->expect(30,"-re",'$\s') || die "Never got prompt from parent
+system:$!\n";
$scp->soft_close();
return;
}
curl peut être utilisé comme une alternative à scp pour copier un fichier et il supporte un mot de passe sur la ligne de commande.
curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
personne ne l'a mentionné, mais Putty scp (pscp) a une option-pw pour mot de passe.
Documentation peut être trouvée ici: https://the.earth.li/~sgtatham/mastic/0.67/htmldoc/Chapitre 5.html#pscp
-
assurez-vous d'avoir l'outil "expect" avant, sinon, le faire
# apt-get install expect
-
créez le fichier de script a avec le contenu suivant. (# vi /root/fichier)
spawn scp /path_from/file_name user_name_here@to_host_name:/path_to
expect "password:"
send put_password_here\n;
interact
-
exécutez le script fichier avec "s'attendre à" outil
# expect /root/scriptfile
vous pouvez utiliser ssh-copy-id
pour ajouter la touche ssh:
$which ssh-copy-id #check whether it exists
s'il existe:
ssh-copy-id "user@remote-system"
une fois que vous avez configuré ssh-keygen
comme expliqué ci-dessus, vous pouvez faire
scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
si vous voulez réduire la dactylographie à chaque fois, vous pouvez modifier votre fichier .bash_profile
et mettre
alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/
puis à partir de votre terminal, faites source ~/.bash_profile
. Ensuite, si vous tapez remote_scp
dans votre terminal, la commande scp
doit être exécutée sans mot de passe.
une alternative serait d'ajouter la moitié publique de la clé de l'utilisateur au fichier des clés autorisées du système cible. Sur le système à partir duquel vous initialisez le transfert, vous pouvez exécuter un démon SSH-agent et ajouter la moitié privée de la clé à l'agent. Le travail par lots peut alors être configuré pour utiliser l'agent pour obtenir la clé privée, plutôt que de demander le mot de passe de la clé.
cela devrait être faisable sur un système UNIX / Linux ou sur une plate-forme Windows en utilisant concours de beauté et pscp.
étapes pour obtenir sshpass pour rhel / centos 6:
# wget http://epel.mirror.net.in/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# yum install sshpass
j'ai trouvé cette réponse vraiment utile ici .
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
non seulement vous pouvez passer le mot de passe, mais aussi il affichera la barre de progression lors de la copie. Vraiment génial.