Вопрос

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

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Установить :

  • ubuntu/debian
    • apt install sshpass
  • centos/fedora
    • yum install sshpass
  • mac с / macports
    • port install sshpass
  • мак с заваркой
    • 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, версия scp для Putty ("pscp") позволяет передавать пароль с помощью -pw параметр.

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

Вы можете использовать скрипт "expect" в 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 

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

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

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

Вот пример того, как вы делаете это с помощью 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;
}

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

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

  1. убедитесь, что у вас есть инструмент "ожидать", прежде чем, если нет, сделать это

    # apt-get install expect

  2. создайте файл сценария a со следующим содержимым.(# vi /root/файл сценария)

    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-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 команда без пароля.

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

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

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

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

Альтернативой может быть добавление открытой половины ключа пользователя в файл авторизованных ключей в целевой системе.В системе, из которой вы инициируете передачу, вы можете запустить демон 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/

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top