SSH туннель и Rdesktop в одну строку
Для удаленного доступа к машине с Windows мне нужно туннелировать через мой сервер Ubuntu. Для настройки туннеля у меня есть
ssh -l root -C -L 9999:windowsmachine:23389 myserver
Затем я должен открыть другую консоль и запустить
rdesktop -u user -password -f localhost:9999
Как я могу объединить их в одну команду или скрипт?
1 ответ
(Отказ от ответственности: см. Комментарии для более эффективного решения.)
Это сложно по ряду причин:
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
в обоих случаях это зависит от вас.