Как передать пароль в scp?


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

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

14 187

14 ответов:

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

использовать 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

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

установка :

  • 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

просто сгенерируйте ключ 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

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

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

вы можете использовать скрипт 'expect' на unix / terminal

например создать тест.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 

Я надеюсь, что помогает.

вот пример того, как вы это делаете с :

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 может использоваться в качестве альтернативы scp для копирования файла и поддерживает пароль в командной строке.

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

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

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

  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

вы можете использовать ssh-copy-id чтобы добавить ssh ключ:

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

Если существует:

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

после установки 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 в вашем терминале следует запустить без пароля.

альтернативой было бы добавить открытую половину ключа пользователя в файл авторизованных ключей в целевой системе. В системе, из которой вы инициируете передачу, вы можете запустить демон ssh-agent и добавить частную половину ключа к агенту. Затем пакетное задание можно настроить на использование агента для получения закрытого ключа вместо запроса пароля ключа.

Это должно быть возможно либо в системе UNIX / Linux, либо на платформе Windows с помощью pageant и программе pscp.

шаги, чтобы получить sshpass для 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

источник:https://community.mapr.com/thread/9040

Я нашел этот действительно полезный ответ здесь.

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

не только вы можете пройти там пароль, но и он будет показывать прогресс-бар при копировании. Действительно потрясающе.