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é.

187
demandé sur Ben Voigt 2008-09-08 20:35:09

14 réponses

vous pouvez le script avec un outil comme expect (il y a des fixations pratiques aussi, comme Pexpect pour Python).

23
répondu Pat Notz 2017-12-20 15:05:05

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/ssh‌​pass.rb
357
répondu KevinS 2017-07-27 07:24:26

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

33
répondu mustafaturan 2015-12-25 11:30:59

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 .

ceci est mentionné dans la documentation ici.

30
répondu gWay 2017-01-23 21:33:29

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.

17
répondu Prabhjeet 2013-01-16 19:28:53

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;
}
9
répondu Espo 2014-07-18 12:13:41

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/
8
répondu MBerg 2017-11-16 11:28:32

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

6
répondu galushka 2017-01-23 21:50:27
  1. assurez-vous d'avoir l'outil "expect" avant, sinon, le faire

    # apt-get install expect

  2. 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

  3. exécutez le script fichier avec "s'attendre à" outil

    # expect /root/scriptfile

2
répondu Kevin Chui 2014-03-21 06:04:33

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"
1
répondu Shen JI 2016-11-22 10:19:25

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.

1
répondu hi15 2017-10-20 07:08:58

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.

0
répondu rjray 2008-09-16 08:16:54

é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

-2
répondu Long 2018-02-19 18:17:31

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.

-9
répondu valk 2017-04-13 12:22:45