Назад | Перейти на главную страницу

ssh-туннель и rdesktop в одной строке

Чтобы получить удаленный доступ к Windows-машине, мне нужно пройти через мой сервер ubuntu. Для настройки туннеля у меня есть

ssh -l root -C -L 9999:windowsmachine:23389 myserver

Затем мне нужно открыть другую консоль и запустить

rdesktop -u user -password -f localhost:9999

Как я могу объединить их в одной команде или скрипте?

(Отказ от ответственности: См. Комментарии для более эффективного решения.)

Это сложно по ряду причин:

  • ssh должен работать на переднем плане, чтобы соединение оставалось открытым. Это затрудняет выполнение этого в пределах одного экземпляра оболочки, потому что вторая команда должна выполняться параллельно с тем, что она находится на переднем плане.
  • Вы не можете проверить статус возврата ssh команда, потому что к тому времени соединение будет закрыто. Это означает, что команда resktop сработает независимо от того, прошла ли аутентификация ssh успешно.
  • Для rdesktop Чтобы команда не была интерактивной, ей необходимо указать пароль в командной строке. Хранить пароль в скрипте - плохая идея.

Попробуйте что-то вроде этого:

#!/bin/bash

# Request password, no echo
read -s RDP_PW

# Insert password validation here (i.e. make sure we got input)

# Execute sleep+rdesktop in a background subshell, redirect STDOUT to /dev/null.
( sleep 5; rdesktop -u user -p$RDP_PW -f localhost:9999 ) >/dev/null &

# Run the ssh command. We have 5 seconds establish the tunnel.
ssh -l root -C -L 9999:windowsmachine:23389 myserver

При необходимости измените состояние сна. Вы можете удалить перенаправление / dev / null, пока не убедитесь, что это работает. Вы также можете перенаправить STDERR.

Лучший подход основан на терминальной программе, которую вы используете в X, или на том, знакомы ли вы с терминальным мультиплексором или нет. Если ваша программа терминала предоставляет вам возможность вызывать команду на новой вкладке, используйте префикс ssh с соответствующей командой для этого. Если вы выберете маршрут мультиплексора, используйте синтаксис для вызова ssh в новом окне мультиплексора. Работа с запросами паролей от ssh в обоих случаях зависит от вас.