LINUX.ORG.RU
решено ФорумAdmin

ssh через ssh через ssh


0

3

Есть сервер, отдаленный от меня на несколько хостов.

То есть, нужно сделать сначала ssh server1 (ввести пароль), в полученном шелле опять запустить ssh server2 и ввести пароль, и так несколько раз, пока наконец-то не окажемся в искомом шелле на самом последнем сервере в цепочке.

Можно ли как-нибудь сделать это с помощью одной команды?

Пробую так, получаю ошибку:

ssh user1@server1 «ssh user2@server2»

Pseudo-terminal will not be allocated because stdin is not a terminal. Permission denied (gssapi-keyex,gssapi-with-mic,publickey,keyboard-interactive).

Дополнительные условия: 1) обычные туннели запрещены, 2) использование беспарольных ключей и ключей вообще - крайне нежелательно хотя и возможно (придется постоянно ругаться с админом) 3) обязательно получить именно _интерактивный_ режим, а не просто удаленно выполнить команду.

★★★★☆

обычные туннели запрещены, использование беспарольных ключей и ключей вообще - крайне нежелательно хотя и возможно

netcat на промежуточных серверах есть? Если да, то можно добавить в ~/.ssh/config что-то типа:

Host gw2
    ProxyCommand ssh gw1 'nc gw2 %p'

Host gw3
    ProxyCommand ssh gw2 'nc gw3 %p'

Host dest
    ProxyCommand ssh gw3 'nc dest %p'
gw* - это промежуточные сервера, dest - тот, на который нужно достучаться. Запускать так:
ssh dest

Deleted ()
Ответ на: комментарий от megabaks

> ssh -t user1@server1 ssh user2@server2 ???

работает =)
ССЗБ - пропустил в одном месте в цепочке этот -t всё накрылось ))))))


а можно как-нибудь сделать, чтобы пароль забить открытым текстом прямо в командную строку, чтобы без ключей?

stevejobs ★★★★☆ ()
Ответ на: комментарий от Deleted

> netcat на промежуточных серверах есть?

ух ты, какой кошерный способ! Это вот это: (http://nc110.sourceforge.net/) ?

но нет, нету там нетката :( Там вообще мало чего есть. Солярки 2005-ого года производства, с базовым набором пакетов, еще чуток урезанным админом.

можно, наверное, попробовать под локальным юзверем собрать этот netcat ручками из исходников подо всеми серверами...

stevejobs ★★★★☆ ()

Дополнительные условия: 1) обычные туннели запрещены, 2) использование беспарольных ключей и ключей вообще - крайне нежелательно хотя и возможно (придется постоянно ругаться с админом) 3) обязательно получить именно _интерактивный_ режим, а не просто удаленно выполнить команду.

1. Использовать -t для запуска псевдо-терминала.
2. Лучше, конечно, в таком случае использовать ключи. Если админ адекватный, и нормально объяснить ему ситуацию, то не вижу особых проблем. Не каждый же день будешь новые ключи делать.

sysmouse ()
Ответ на: комментарий от Nastishka

SSH_ASKPASS

оно работает как-то ОЧЕНЬ странно.

создаю файлик с паролем my_askpass_script:

#!/bin/bash
echo "mypassword"

и выполняю команду:

export SSH_ASKPASS="/root/my_askpass_script" && export DISPLAY=":0" && setsid ssh user2@server2

После этого смешались кони, люди: на экране поочередно появляюется то шелл сервера server1 (с которого запускалась команда), то шелл удаленного сервера server2. Причем в удаленный шелл нифига не все буквы вводятся(!). Печатаешь слово «exit», а вместо этого на экране «ei». Пришлось анально убивать терминал.((((

stevejobs ★★★★☆ ()
Ответ на: комментарий от sysmouse

> Лучше, конечно, в таком случае использовать ключи. Если админ адекватный, и нормально объяснить ему ситуацию, то не вижу особых проблем.

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

попробовал сейчас с ключами. Значения из authorized_keys не подхватываются. ~/.ssh/ssh_config не читается также. Странно всё это.

stevejobs ★★★★☆ ()
Ответ на: комментарий от leave

> ключи могут быть и закрытыми паролем. man ssh-agent

по последним сведениям, ключи не работают вообще. Остается надежда, что появится магический пользователь Nastishka и расскажет, как сделать чтобы SSH_ASKPASS не глючил...

stevejobs ★★★★☆ ()
Ответ на: комментарий от sin_a

> А то ещё screen бывает.

на этих серверах screen'а не бывает. Можно, конечно, втихую от админа сконпелять screen в своем хомячке. Но там серверов уж сильно дофига, чтобы этим заниматься.

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

Так один только нужен, входной.

На него заходишь, и тебе готовые сессии висят во все места. Главное в такой ситуации - только аптайм.

sin_a ★★★★★ ()
Ответ на: комментарий от sin_a

> На него заходишь, и тебе готовые сессии висят во все места. Главное в такой ситуации - только аптайм.

ок, годное решение. Только открывать надо не на «входном сервере», а на своем собственном отдельном сервере. Потому что, вдруг твой аккаунт используют еще какие-то люди, тогда они запутаются в твоих открытых скринах.

stevejobs ★★★★☆ ()
Ответ на: комментарий от sin_a

> Опаньки...

чо-чо опаньки, один аккаунт использует 100500 человек. Один bash_profile - стопитьцот серверов с _разными_ ОС. Один каталог с программами... ну ты понял.

stevejobs ★★★★☆ ()
Ответ на: комментарий от stevejobs

чо-чо опаньки, один аккаунт использует 100500 человек. Один bash_profile - стопитьцот серверов с _разными_ ОС. Один каталог с программами... ну ты понял.

Старые санки и вот такое вот... это наверное очень жёсткий ънтерпрайз.

Deleted ()
Ответ на: комментарий от stevejobs

> на экране поочередно появляюется

Конфликт за терминал. Пошлите например SIGSTOP тому шеллу который запустил ssh, или любым другим способом, не свзяанным с чтением stdin, приостановите его выполнение, например через sleep.

Nastishka ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.