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

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

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

Ответ 1

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

Ответ 2

Используйте sshpass:

sshpass -p "password" scp -r [email protected]:/some/remote/path /some/local/path

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

sshpass -f "/path/to/passwordfile" scp -r [email protected]:/some/remote/path /some/local/path

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

Установить:

  • убунту /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

Ответ 3

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

ssh-keygen -t rsa -C "[email protected]"

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

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

Ответ 5

Вы можете использовать "ожидать" script в unix/terminal

Например, создайте 'test.exp':

#!/usr/bin/expect
        spawn scp  /usr/bin/file.txt [email protected]<ServerLocation>:/home
        set pass "Your_Password"
        expect {
        password: {send "$pass\r"; exp_continue}
                  }

запустите script

expect test.exp 

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

Ответ 6

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

Ответ 8

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

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

Ответ 9

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

    # apt-get install expect

  • создайте файл script со следующим содержимым. (# vi/root/scriptfile)

    spawn scp /path_from/file_name [email protected]_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  • выполнить файл script с помощью инструмента "Ожидание"

    # expect /root/scriptfile

Ответ 10

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

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

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

ssh-copy-id  "[email protected]"

Ответ 11

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

scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/

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

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file [email protected]:/path/in/remote/server/

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

Ответ 12

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

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

Ответ 13

шаги для получения 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

Ответ 14

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

rsync -r -v --progress -e ssh [email protected]:/address/to/remote/file /home/user/

Не только вы можете передать там пароль, но также покажет индикатор выполнения при копировании. Действительно удивительный.