Чтобы получить удаленный доступ к 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
в обоих случаях зависит от вас.