Как передать пароль на scp? - PullRequest
231 голосов
/ 08 сентября 2008

Я знаю, что это не рекомендуется, но возможно ли вообще передать пароль пользователя в scp?

Я бы хотел скопировать файл через scp как часть пакетного задания, и принимающему серверу, конечно же, нужен пароль, и нет, я не могу легко изменить его на аутентификацию на основе ключей.

Ответы [ 14 ]

428 голосов
/ 19 декабря 2012

Использование sshpass :

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

или около того пароль не отображается в истории bash

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

Вышеуказанное копирует содержимое пути с удаленного хоста на ваш локальный.

Установка:

41 голосов
/ 22 февраля 2012

просто сгенерируйте ключ ssh как:

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

скопировать содержимое ~/.ssh/id_rsa.pub и, наконец, добавьте его на удаленные машины ~/.ssh/authorized_keys

убедитесь, что удаленный компьютер имеет разрешения 0700 for ~./ssh folder и 0600 for ~/.ssh/authorized_keys

32 голосов
/ 30 ноября 2010

Если вы подключаетесь к серверу из Windows, версия scp ("pscp") для Putty позволяет передавать пароль с параметром -pw.

Это упомянуто в документации здесь.

25 голосов
/ 08 сентября 2008

Вы можете написать его с помощью такого инструмента, как ожидайте (также есть удобные привязки, например Pexpect для Python).

18 голосов
/ 16 января 2013

Вы можете использовать сценарий «ожидаем» в Unix / Terminal

Например, создать '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}
                  }

запустить скрипт

expect test.exp 

Надеюсь, это поможет.

14 голосов
/ 16 ноября 2017

curl может использоваться как альтернатива scp для копирования файла, и он поддерживает пароль в командной строке.

curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/
9 голосов
/ 08 сентября 2008

Вот пример того, как вы делаете это с помощью инструмента expect:

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;
}
6 голосов
/ 13 мая 2015

Никто не упоминал об этом, но Putty scp (pscp) имеет опцию -pw для пароля.

Документацию можно найти здесь: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp

2 голосов
/ 20 октября 2017

Как только вы установите ssh-keygen, как описано выше, вы можете сделать

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

Если вы хотите каждый раз уменьшать ввод, вы можете изменить файл .bash_profile и поместить

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

Тогда из вашего терминала сделайте source ~/.bash_profile. После этого, если вы наберете remote_scp в своем терминале, он должен выполнить команду scp без пароля.

2 голосов
/ 21 марта 2014
  1. убедитесь, что у вас есть инструмент "ожидать", прежде чем, если нет, сделайте это

    # apt-get install expect

  2. создать файл сценария со следующим содержимым. (# 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. выполнить файл сценария с помощью инструмента «ожидаем»

    # expect /root/scriptfile

...