Как передать пароль scp?
-
09-06-2019 - |
Вопрос
Я знаю, что это не рекомендуется, но возможно ли вообще передать пароль пользователя 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/sshpass.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
убедитесь, что у вас есть инструмент "ожидать", прежде чем, если нет, сделать это
# apt-get install expect
создайте файл сценария 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
запустите файл сценария с помощью инструмента "ожидать"
# 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/
Вы не только можете передать туда пароль, но и он будет показывать индикатор выполнения при копировании.Действительно потрясающе.