Хорошо - Я наконец получил эту работу следующим образом:
ssh -i b_dev_id_dsa_2048_a b_dev@b
и альт, это наконец работает.
Благодарит Вас все за справку, и наконец niXar для того финала Homer Simpson ПОНЯТНОЕ ДЕЛО момент как выполнение, это точно назад, к какому Вы делаете, если пользователь является тем же через все хосты.
"Корпоративный S (tupidity)" :-)
SSH / SCP обычно живет с областью философии UNIX, я думаю. Очень редко, чтобы разработчики приложений Unix намеренно сделали его так, администратор не может легко сделать чего-то глупого. Будет обычно быть предупреждением как: "Вы, вероятно, не хотите делать это, потому что..., но, если Вы действительно хотите, прекрасные!".
В случае передачи пароля к ssh в сценарии они намеренно делают это трудным, потому что это просто такая плохая идея.
На данном этапе я даже не обеспокоился бы SSH. Действительно необходимо говорить с людьми корпоративной безопасности и предложить действительное решение для сценария. Если они не хотят использовать ключи, спросите их, что необходимо сделать. Если это не работает, говорит Вашим менеджерам, что они хотят, не может быть сделан из-за ограничений корпоративной безопасности. Если менеджеры действительно настаивают, чтобы Вы сделали это, получили его в письменной форме, или это - Ваша задница на строке
Вставьте стандартную правовую оговорку о корпоративной политике и почему это плохо для помещения пользователя/передачи в сценарии здесь.
Но все мы работаем в реальном мире, где иногда он не имеет смысла. Soo.. Существует много инструментов, которые позволят Вам сделать это. Shell не имеет встроенного способа получить эту работу. Мое предпочтительное оружие для очень быстрых и грязных сценариев этой природы, Ожидают. Смехотворно легко получить выполнение.
#!/usr/bin/expect
set nodename "hostname"
set username "user"
set password "pass"
set prompt "your prompt on the remote system"
eval spawn ssh -x $user@$nodeaddy
set timeout 15
expect "password:" { send "$password\r" }
expect "$prompt" { send "script\r" }
exit 0
Очевидно, это может или не может работать на Вас, но Вы видите от синтаксиса, как простой это должно получить работу.
Сначала предупреждение: будьте осторожны, что Вы не создаете проблему безопасности от имени целесообразности. Kevin и Kyle поднимают положительные стороны. Хранение набора комбинаций имени пользователя/пароля в файле (даже зашифрованная база данных) является, вероятно, очень плохой идеей и может нарушить корпоративную политику.
Решением Вашей проблемы может быть клиентский сертификат. Посмотрите ниже статей для получения дополнительной информации:
Предположение, что общедоступная пара с закрытым ключом позволяется корпоративной политикой, которой это не это трудно для достижения. Получить имя пользователя, отличающееся от пользователя, работающего ssh (сценарий) использование username@host
. Более твердая часть должна получить надлежащую работу закрытых ключей. При предположении, что из-за некоторого ложного чувства защищенности каждый хост должен использовать различную пару ключей (иначе это более просто) необходимо создать конфигурационный файл, который говорит, клиенту, который пара использовать, для который хост (можно также на самом деле указать имя пользователя в файле).
Для openssh файл был бы похож
host a_prod
user usera
IdentityFile ~/.ssh/keyfora_prod
host b_dev
user userb
IdentityFile ~/.ssh/keyforb_prod
и т.д.
Просто помните, что эта установка не на самом деле более безопасна. Если кто-то может получить доступ к этому пользователю на этом компьютере, он может считать все закрытые ключи (который не может иметь пароля, если вещи должны быть безопасными, или необходимо бездельничать с ssh_agent), а также hardcoded пароли. Как нет никакой причины файлов секретных ключей для проживания где-либо еще, но в ssh dir этого пользователя (при потере можно легко создать новый ключ), наличие четырех файлов не отличается от наличия того с точки зрения безопасности.
Без закрытых ключей или Ожидают или что-то как он, я не вижу, как можно сделать это автоволшебно. Что-то получено для предоставления.
У Вас действительно есть что-то для работы с, не так ли? Я предположил, что у Вас нет Perl вокруг, так как Вы могли затем использовать Expect.pm? Python? Что-нибудь? Просто старый ужасный ksh?Расскажите подробнее.
Если Нельзя использовать язык программирования, то необходимо ввести передачу вручную. В этом случае можно использовать:
scp myfile b_dev@b_prod:/path/to/dest
Если пакеты включены, рассматривают использование SFTP вместо этого. Вы могли затем использовать lftp и не иметь для ввода пароля, здесь прямо из страницы справочника:
lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]
Но если Вы не можете добраться, Ожидают, что я сомневаюсь, что можно использовать lftp. Можете Вы?
/ О, я ненавижу собственное дерьмо Unix
Это не хорошая идея, но если действительно необходимо сделать это, sshpass может помочь Вам: http://sourceforge.net/projects/sshpass/
Я должен был сделать что-то подобное, только назад. Мы осуществляем файлы набора серверов, и это - способ, которым мы сделали это.
awk '{FS="|"; printf("rsync %s:%s %s &\n", $1, $2, $3)}' config | sh
Создайте файл, названный конфигурацией, и в нем поместил строки, которые Вы хотите выполнить. (отметьте: необходимо вставить пустую строку для запуска с).
Путем это - установка прямо сейчас, Вы поместили бы username@server.com|(folder on remote server)|(folder on local server)
в конфигурацию, и это будет rsync два. Вы захотите переключить команду rsync в команду awk, чтобы сделать противоположное.
Это работало бы хорошо с ssh-ключевым автором, который является тем, что мы используем.
Я бы также предложил создать SSH-ключи для аутентификации и использовать такие инструменты, как unison или lsyncd (в зависимости от ваших потребностей), чтобы синхронизировать файлы.
Если аутентификация на основе ключа не подходит, вы можете использовать команду «expect» ( http://linux.die.net/man/1/expect ) для ее написания. Expect проверяет определенный выход (скажем, вопрос для пароля) и связанный с этим ввод определенной строки (в этом примере пароль).
Но опять же, как было предложено, я бы предпочел решение с ssh-ключом.