Question

Je sais que ce n'est pas recommandé, mais est-il possible de transmettre le mot de passe de l'utilisateur à 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é.

Était-ce utile?

La solution

Vous pouvez le scripter avec un outil comme attendre (il existe aussi des liaisons pratiques, comme Attendez-vous pour Python).

Autres conseils

Utiliser 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'historique bash

sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path

Ce qui précède copie le contenu du chemin de l'hôte distant vers votre hôte local.

Installer :

  • Ubuntu/Debian
    • apt install sshpass
  • centos/fedora
    • yum install sshpass
  • mac avec macports
    • port install sshpass
  • mac avec infusion
    • brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master‌​/Library/Formula/ssh‌​pass.rb

générez simplement une clé ssh comme :

ssh-keygen -t rsa -C "your_email@youremail.com"

copier le contenu de ~/.ssh/id_rsa.pubet enfin ajoutez-le aux machines distantes ~/.ssh/authorized_keys

assurez-vous que la machine distante dispose des autorisations 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 transmettre le mot de passe avec le -pw paramètre.

Ceci est mentionné dans la documentation ici.

Vous pouvez utiliser le script 'expect' sur unix/terminal

Par exemple, créez '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 cela aide.

curl peut être utilisé comme alternative à scp pour copier un fichier et prend en charge un mot de passe sur la ligne de commande.

curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/

Voici un exemple de la façon dont vous procédez 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;
}

Personne n'en a parlé, mais Mastic scp (pscp) a une option -pw pour le mot de passe.

La documentation peut être trouvée ici : https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp

  1. assurez-vous d'avoir l'outil "attendre" avant, sinon, faites-le

    # apt-get install expect

  2. créez un fichier de script avec le contenu suivant.(# vi /root/scriptfile)

    spawn scp /path_from/file_name user_name_here@to_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  3. exécuter le fichier de script avec l'outil "expect"

    # expect /root/scriptfile

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 souhaitez réduire la saisie à chaque fois, vous pouvez modifier votre .bash_profile fichier et mettre

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

Puis depuis votre terminal faites source ~/.bash_profile.Ensuite si vous tapez remote_scp dans votre terminal, il devrait exécuter le scp commande sans mot de passe.

Vous pouvez utiliser ssh-copy-id pour ajouter une clé ssh :

$which ssh-copy-id #check whether it exists

Si existe :

ssh-copy-id  "user@remote-system"

Une alternative serait d'ajouter la moitié publique de la clé de l'utilisateur au fichier de clés autorisées sur le système cible.Sur le système à partir duquel vous lancez 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 ensuite ê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 réalisable sur un système UNIX/Linux ou sur une plate-forme Windows en utilisant pageant 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

source: https://community.mapr.com/thread/9040

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 y transmettre le mot de passe, mais cela affichera également la barre de progression lors de la copie.Vraiment génial.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top