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