2013-04-18 2 views
0

Я хотел бы запустить приложение (назовите его firefox) на моей рабочей машине. Проблема в том, что мне нужно выполнить сложное туннелирование ssh, чтобы получить доступ к нему, поскольку доступ к машине заблокирован снаружи, а некоторые порты также заблокированы внутри. Поэтому я делаю следующее.Как автоматизировать решение vnc + ssh

ssh -v -L 1200:serverC:22 [email protected] (locally) 
ssh -v -L 5900:127.0.0.1:5900 -p 1200 [email protected] (locally) 
x11vnc -safer -localhost -nopw -once -display :0 (on serverC) 
vinagre localhost::5900 (locally) 

Затем я запускаю firefox (скажем) в открывшемся окне vnc, и все это работает.

Однако я хотел бы иметь сценарий bash, который делает это для меня. Как я могу его автоматизировать?

Есть две проблемы.

  1. Мне нужно оставаться в силе после каждого ssh выше для работы с туннелированием, поэтому простой сценарий bash просто останавливается после первого шага.
  2. Я не знаю, как заставить приложение автоматически запускаться в окне vnc.

В идеале я бы просто напечатал «./remote-firefox» (например) локально, чтобы все это произошло.

ответ

2

Try:

x11vnc -safer -localhost -nopw -once -display :0 #Run manually on system_C 

& на локальной системе,

ssh -t -L 5902:localhost:5901 [email protected]_B 'ssh -t -L 5901:localhost:5900 [email protected]_C' & 
#Note: Enable password-less (key based) authentication from "your_pc -> servB" & "servB -> servC" 

vncviewer localhost:2 #Run on local system 

Примечание: Если команды не получится, попробуйте изменить номера портов. В этом примере я пытаюсь туннель это, как показано ниже:

your_PC:5902 <-> server_B:5901 <-> server_C:5900 

Я не проверял это 2 уровня цепи (я не знаю, если -display параметра x11vnc работает через SSH, но я думаю, это должны):.

#Run both lines on local system 
ssh -t -L 5902:localhost:5901 [email protected]_B "ssh -t -L 5901:localhost:5900 [email protected]_C 'x11vnc -safer -localhost -nopw -once -display :0'" & 
vncviewer localhost:2 

EDIT: Чтобы разместить это:

да это все. Но досадно servB -> servC заблокировал порт 5900. - Ануш

#Run both lines on local system. This may be overhead, but should work. 
ssh -t -L 5902:localhost:5901 [email protected]_B "ssh -t -L 5901:localhost:1200 [email protected]_C 'ssh localhost -L 1200:localhost:5900 & x11vnc -safer -localhost -nopw -once -display :0'" & 
vncviewer localhost:2 
+0

Какая часть я заменяю с этим? – Anush

+0

Мое понимание таково: у вас есть локальная система Linux и вы хотите просмотреть vnc удаленной системы Linux. Если да, то 2 команды должны соответствовать вашему требованию, чтобы заменить все 4 команды. Если ваш vncviewer поддерживает параметр '-via', он будет заниматься туннелированием за кулисами. – anishsane

+0

Ah no. Проблема в том, что я не могу напрямую обращаться к удаленной системе, и на самом деле я не могу даже получить доступ к 5900 от промежуточной машины. Вот почему я должен сделать это сложное наложение. – Anush