Как передать пароль в scp?
Я знаю, что это не рекомендуется, но можно ли вообще передать пароль пользователя в scp?
Я хотел бы скопировать файл через scp как часть пакетного задания, и принимающий сервер, конечно, нуждается в пароле, и нет, я не могу легко изменить это на аутентификацию на основе ключей.
14 ответов
использовать 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/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, Версия Putty scp ("pscp") позволяет передать пароль с помощью .
вы можете использовать скрипт "expect" в unix/terminal
например, create ' 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
надеюсь, это поможет.
вот пример того, как вы это делаете с :
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/
никто не упоминал об этом, но шпаклевка scp (pscp) имеет опцию-pw для пароля.
документацию можно найти здесь:https://the.earth.li / ~sgtatham / putty / 0.67/htmldoc / Chapter5.html#pscp
-
убедитесь, что у вас есть" ожидать " инструмент, прежде чем, если нет, сделать это
# apt-get install expect
-
создайте файл сценария a со следующим содержимым. (# 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
-
выполнить файл сценария с помощью инструмента "ожидать"
# 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
Я нашел этот действительно полезный ответ здесь.
rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/
не только вы можете передать там пароль, но и он покажет индикатор выполнения При копировании. Действительно потрясающе.