Как да отговоря на подканата за парола, когато използвам SCP в шел скрипт?

Първо, добре знам, че има много въпроси по тази тема. Прочетох ги, но все пак успях да намеря подходящ отговор за моята ситуация.

Бих искал да scp цялата ~/cs###/assign1 директория от локалната до домашната директория на училището с команден скрипт. Въпросът ми е има ли начин в моя скрипт да изчакам подканата за парола и след това да симулирам събитие на клавиатурата, за да „напиша“ паролата си?


тук е наистина подробно ръководство за това как да настроите ключа


person derrdji    schedule 22.09.2009    source източник
comment
Този въпрос звучи точно като вашата ситуация: stackoverflow. com/questions/50096/how-to-password-to-scp   -  person innaM    schedule 23.09.2009
comment
Обърнете внимание, че отговорите на предполагаемия дублиран въпрос не споменават „ssh ключове“, както е споменато от BZ.   -  person Jonathan Leffler    schedule 23.09.2009
comment
Надявах се, че може да има решение, използващо само прости команди на shell или unix.   -  person derrdji    schedule 23.09.2009
comment
Възможен дубликат на Как да предам парола на scp?   -  person Jim Fell    schedule 15.02.2019


Отговори (12)


Не са разрешени ssh ключове? Това би било по-добро решение.

person BZ.    schedule 22.09.2009

Използвайте "sshpass"!

#!/bin/bash
sshpass -p "password" scp -r /some/local/path [email protected]:/some/remote/path
person KevinS    schedule 19.12.2012
comment
sshpass изглежда интересно. Работите върху система, която няма да работи добре със SSH ключове, така че това ще свърши работа. Благодаря! - person Giacomo1968; 02.02.2014

Не мисля, че можете лесно да направите това. Това, което можете да направите, е вместо това да използвате удостоверяване с публичен ключ.

Нещо в тази насока

ssh-keygen -t rsa
ssh school mkdir .ssh/
cat ~/.ssh/id_rsa.pub | ssh school "cat >>.ssh/authorized_keys"

(or dsa).

Но хей, това не е сървърна грешка, нали? ;-)

person Michael Krelin - hacker    schedule 22.09.2009
comment
Сървърът и всичко беше настроено от училище, нямам контрол върху настройката в този край - person derrdji; 23.09.2009
comment
Тези настройки са във вашата домашна директория. - person Michael Krelin - hacker; 23.09.2009

Обмислете използването на ключове или външна библиотека.

Не мисля, че е възможно иначе (дано не греша), тъй като налага автоматично грубо проникване и надушване на пароли.

Има библиотеки, които могат да правят това, което искате (използвайте SFTP протокола, без да извиквате scp), като libssh .

Отново горещо препоръчвам ключове.

person LiraNuna    schedule 22.09.2009
comment
Хайде, автоматизирането на атаките с груба сила може да се направи и с помощта на библиотеки ;-) - person Michael Krelin - hacker; 23.09.2009

Съгласен съм, че трябва да използвате ключове. Но expect може да автоматизира интерактивния аспект на процеса, АКО искате да кодирате твърдо паролата си в скрипт с обикновен текст файл.

person glenn jackman    schedule 22.09.2009

Нещо подобно - http://code.google.com/p/enchanter/ ?

person cms    schedule 22.09.2009

След като настроите ssh-keygen, както е обяснено тук, можете да направите

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

където id_rsa е локалният ключ, генериран в настройката ssh-keygen.

Ако искате да намалите въвеждането всеки път, можете да промените своя .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 без парола.

person hi15    schedule 20.10.2017

Ако можете да монтирате директорията от Windows машина (напр. чрез AFS, NFS или SMB, което направиха всички Windows лаборатории на моя университет), можете да използвате pscp с ключ -pw.

person i_am_jorf    schedule 22.09.2009

Защо просто не използвате опцията "-r", за да го копирате рекурсивно? Или вместо това да използвате rsync?

Можете също така да използвате удостоверяване с публичен ключ, което не изисква помощ от тяхна страна, стига да имате действителен потребителски акаунт. Вижте това

person kwatford    schedule 22.09.2009

Не казвате коя платформа използвате у дома и в училище. Ако приемем, че Linux, Cygwin или OS/X имате няколко опции:

  1. Удостоверяване с публичен ключ, ако не е изключено на сървъра
  2. ssh-agent и ssh-add, за да въведете паролата си веднъж на сесия

За вариант (1) бихте

  1. генерирайте двойка ключове у дома с помощта на ssh-keygen, без парола на частния ключ. Обърнете внимание, че пропускането на парола вероятно не е добра идея, ако други хора използват същия компютър, но вашата цел е да избегнете необходимостта да въвеждате паролата.
  2. качете ПУБЛИЧНИЯ ключ във вашия училищен акаунт и го поставете в ~/.ssh/authorized_keys
  3. Използвайте scp с опцията "-i identityfile", където identityfile е пълният път до вашия личен ключ. Или добавете запис към .ssh/config (вижте man страниците)

За втората опция ssh-agent ви позволява да кеширате паролата си в локален процес веднъж на сесия. Задавате време на изтичане

person Jim Garrison    schedule 22.09.2009

Както мнозина вече казаха, че използването на ssh ключове би било най-безопасният и най-добрият начин. Ако някой друг все още се чуди и търси помощ, в помощта на Ubuntu има бърз и ясен начин за използване на ssh ключове.

person Karls    schedule 13.10.2015

Не намерих начин да направя това на нашите системи автоматично - правя ssh на едно устройство, а след това ssh на следващото устройство и на двете не мога да инсталирам друг софтуер. Така че мога да използвам само съществуващи команди на shell скрипт. Мога или да копирам всички файлове от даден тип с, като например *.png, или един по един в моя скрипт файл, като трябва да въведа паролата за всеки отделен файл. Единственото нещо, което направих и беше полезно, беше да напиша паролата във файл, да я изрежа и да мога да я поставя във всяка подкана за всеки файл.

person Janin    schedule 17.11.2018