Существует ли путь к SSH / SCP к другому серверу как другой пользователь, с помощью сценария?

https://stackoverflow.com/questions/298562/windows-xp-or-vista-how-can-i-run-a-batch-file-in-the-background-no-windows-dis

Короче говоря, "запускаются,/b" является решением для DOS, но существует несколько других опций в зависимости от Вашей среды.

4
задан 23 July 2009 в 22:39
9 ответов

Хорошо - Я наконец получил эту работу следующим образом:

  1. Сделайте ssh-keygen на всех серверах.
  2. Установите файл авторизации для каждого пользователя с их открытым ключом.
  3. Установите идентификационный файл для каждого пользователя с закрытым ключом
  4. Скопируйте закрытые ключи для целевых серверов к серверу, от которого Вы хотите к ssh как уникальные файлы (b_dev_id_dsa_2048_a, c_test_id_dsa_a...)
  5. Назовите ssh следующим образом на хосте a: ssh -i b_dev_id_dsa_2048_a b_dev@b

и альт, это наконец работает.

Благодарит Вас все за справку, и наконец niXar для того финала Homer Simpson ПОНЯТНОЕ ДЕЛО момент как выполнение, это точно назад, к какому Вы делаете, если пользователь является тем же через все хосты.

1
ответ дан 3 December 2019 в 02:28

"Корпоративный S (tupidity)" :-)

SSH / SCP обычно живет с областью философии UNIX, я думаю. Очень редко, чтобы разработчики приложений Unix намеренно сделали его так, администратор не может легко сделать чего-то глупого. Будет обычно быть предупреждением как: "Вы, вероятно, не хотите делать это, потому что..., но, если Вы действительно хотите, прекрасные!".

В случае передачи пароля к ssh в сценарии они намеренно делают это трудным, потому что это просто такая плохая идея.

На данном этапе я даже не обеспокоился бы SSH. Действительно необходимо говорить с людьми корпоративной безопасности и предложить действительное решение для сценария. Если они не хотят использовать ключи, спросите их, что необходимо сделать. Если это не работает, говорит Вашим менеджерам, что они хотят, не может быть сделан из-за ограничений корпоративной безопасности. Если менеджеры действительно настаивают, чтобы Вы сделали это, получили его в письменной форме, или это - Ваша задница на строке

9
ответ дан 3 December 2019 в 02:28
  • 1
    Я мог использовать ключи, но я полагаю, что они - пользователь, конкретный и живой в отдельном user' s ~/.ssh2 sub dir и файл авторизации в том же самом dir. Сделать, чтобы другой пользователь использовал те файлы, не работает. Нет никакого способа, которым я собираюсь настроить это для всех пользователей на хосте, который был бы главной ошибкой. –  Kevin K 23 July 2009 в 21:03
  • 2
    Вы, кажется, смущены ssh ключами. Файлы в ~/.ssh только читаются пользователем, которому они принадлежат. Пользователь, соединяющийся, имеет частный ключ, обычно в ~/.ssh/id_ {d, r} sa.pub, но это могло быть где угодно и указано к ssh через-i и пользователю, которого он соединяет, как имеет соответствие общественность ключ ~/.ssh/authorized_keys –  niXar 24 July 2009 в 11:11

Вставьте стандартную правовую оговорку о корпоративной политике и почему это плохо для помещения пользователя/передачи в сценарии здесь.

Но все мы работаем в реальном мире, где иногда он не имеет смысла. 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

Очевидно, это может или не может работать на Вас, но Вы видите от синтаксиса, как простой это должно получить работу.

1
ответ дан 3 December 2019 в 02:28
  • 1
    " и у меня нет способности установить, ожидают " –  Kyle Brandt 23 July 2009 в 15:54

Сначала предупреждение: будьте осторожны, что Вы не создаете проблему безопасности от имени целесообразности. Kevin и Kyle поднимают положительные стороны. Хранение набора комбинаций имени пользователя/пароля в файле (даже зашифрованная база данных) является, вероятно, очень плохой идеей и может нарушить корпоративную политику.

Решением Вашей проблемы может быть клиентский сертификат. Посмотрите ниже статей для получения дополнительной информации:

1
ответ дан 3 December 2019 в 02:28
  • 1
    Я сделал это прежде, где идентификатор пользователя является тем же через все хосты, это может также работать на пользователя на хосте prod_a к ssh пользователю b на хосте dev_b? –  Kevin K 23 July 2009 в 18:14
  • 2
    @KevinK: можно войти как другой пользователь в удаленный хост. It' s опция-l (или " ssh username@hostname"). –  robcast 23 July 2009 в 18:24
  • 3
    @robcast: Я получил это, но keygen является конкретным пользователем, если я не настроил его для всего хоста (не шанс), файлы должны находиться в user' s каталог ~/.ssh2, и существуют в их файле авторизации. Я могу просто скопировать их между пользователями и иметь его, все еще работают? Я пробую, и это, кажется, не работает правильно. –  Kevin K 23 July 2009 в 21:00

Предположение, что общедоступная пара с закрытым ключом позволяется корпоративной политикой, которой это не это трудно для достижения. Получить имя пользователя, отличающееся от пользователя, работающего 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 этого пользователя (при потере можно легко создать новый ключ), наличие четырех файлов не отличается от наличия того с точки зрения безопасности.

1
ответ дан 3 December 2019 в 02:28

Без закрытых ключей или Ожидают или что-то как он, я не вижу, как можно сделать это автоволшебно. Что-то получено для предоставления.

У Вас действительно есть что-то для работы с, не так ли? Я предположил, что у Вас нет 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

0
ответ дан 3 December 2019 в 02:28

Это не хорошая идея, но если действительно необходимо сделать это, sshpass может помочь Вам: http://sourceforge.net/projects/sshpass/

0
ответ дан 3 December 2019 в 02:28

Я должен был сделать что-то подобное, только назад. Мы осуществляем файлы набора серверов, и это - способ, которым мы сделали это.

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-ключевым автором, который является тем, что мы используем.

0
ответ дан 3 December 2019 в 02:28

Я бы также предложил создать SSH-ключи для аутентификации и использовать такие инструменты, как unison или lsyncd (в зависимости от ваших потребностей), чтобы синхронизировать файлы.

Если аутентификация на основе ключа не подходит, вы можете использовать команду «expect» ( http://linux.die.net/man/1/expect ) для ее написания. Expect проверяет определенный выход (скажем, вопрос для пароля) и связанный с этим ввод определенной строки (в этом примере пароль).

Но опять же, как было предложено, я бы предпочел решение с ssh-ключом.

0
ответ дан 3 December 2019 в 02:28

Теги

Похожие вопросы