Frage

Ich weiß, es ist nicht empfohlen, aber ist es überhaupt möglich, zu übergeben, das Kennwort des Benutzers scp?

Ich möchte eine Datei kopieren über scp als Teil eines batch-Jobs und der empfangende server das tut, natürlich, müssen Sie ein Kennwort und, Nein, ich kann nicht einfach ändern, der key-basierte Authentifizierung.

War es hilfreich?

Lösung

Sie können ein Skript mit einem tool wie erwarten (es gibt praktisch Bindungen zu, wie Pexpect für Python).

Andere Tipps

Verwenden sshpass:

sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path

oder so das Passwort nicht in der bash-history

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

Die oben genannten Kopien Inhalte der Pfad aus der remote-host zu Ihrem lokalen.

Installieren :

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

generieren Sie einfach einen ssh-Schlüssel wie:

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

kopieren Sie den Inhalt von ~/.ssh/id_rsa.pub und schließlich fügen Sie die remote-Maschinen ~/.ssh/authorized_keys

stellen Sie sicher, dass die remote-Maschine müssen Sie die Berechtigungen 0700 for ~./ssh folder und 0600 for ~/.ssh/authorized_keys

Wenn Sie eine Verbindung mit dem server von Windows, die Putty-version von scp ("pscp") können Sie das Passwort weitergeben, die mit der -pw parameter.

Dies ist in der Dokumentation erwähnt hier.

Sie können über den "rechnen" - Skript auf unix/terminal

Zum Beispiel erstellen '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}
                  }

führen Sie das Skript

expect test.exp 

Ich hoffe, das hilft.

curl kann verwendet werden als eine alternative zu scp-kopieren einer Datei, und es unterstützt einen Passwort auf der Kommandozeile.

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

Hier ist ein Beispiel, wie Sie es tun mit expect Werkzeug:

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;
}

Niemand erwähnte es, aber Putty scp (pscp) hat eine pw-option für Passwort.

Dokumentation können gefunden werden hier: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/5.html#pscp

  1. stellen Sie sicher, dass Sie "erwarten" tool vor, wenn nicht, tun Sie es

    # apt-get install expect

  2. erstellen Sie eine Skriptdatei mit folgendem Inhalt.(# vi /root/file)

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

    expect "password:"

    send put_password_here\n;

    interact

  3. ausführen der Skript-Datei mit "rechnen" - tool

    # expect /root/scriptfile

Sobald Sie die Einrichtung ssh-keygen wie oben erklärt, die Sie tun können

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

Wenn Sie möchten, vermindern Sie die Eingabe jedes mal, Sie können ändern Sie Ihre .bash_profile Datei und legen

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

Dann vom terminal aus tun source ~/.bash_profile.Danach, wenn Sie geben remote_scp in Ihrem terminal ausführen soll, die scp Befehl ohne Passwort.

Sie können verwenden ssh-copy-id hinzufügen des ssh-Schlüssels:

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

Wenn vorhanden:

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

Eine alternative wäre es, fügen Sie die öffentliche Hälfte des Benutzers-Taste, um die authorized-keys-Datei auf dem Zielsystem.Auf dem system, das Sie initiieren der übertragung aus, und führen Sie einen ssh-agent-daemon und fügen Sie den privaten Hälfte des Schlüssels zu der agent.Der batch-Auftrag kann dann so konfiguriert werden, dass der agent den privaten Schlüssel bekommen, anstatt eine Bestätigung für die Schlüssel Passwort.

Dieses sollten Sie tun-können auf einem UNIX/Linux-system oder auf die Windows-Plattform, mit Festzug und pscp.

Schritte, um sshpass Für 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

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

Ich fand diese wirklich hilfreiche Antwort hier.

rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/

Nicht nur Sie übergeben können, da Sie das Kennwort ein, aber es wird auch zeigen die Fortschrittsanzeige beim kopieren.Wirklich genial.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top