2019年4月11日 星期四

反向SSH連線搭配X視窗

標題很拗口,其實就是reverse SSH tunnel with X11 forwarding。遠端的機器放在防火牆下且沒有公開的IP,故無法使用ssh直接連線來控制遠端機器。解決方案就是先讓遠端的機器事先用reverse ssh連線到一台控制用的機器上面並保持連線,需要登入遠端的機器的時候,就先登入到控制用的機器上,然後再用reverse SSH連回到遠端的機器。假設控制用機器的IP address與使用者帳號如下:  
  •  ADDR=控制用機器的公開IP address
  •  USER=控制用機器上面的帳號

事先在遠端的機器開啟終端機輸入:
  • ssh -fNR 55555:localhost:22 ${USER}@${ADDR}
這個指令會開啟控制用機器的port 55555,反向連線到遠端機器的port 22(一般來說都是SSH service,如果開在port 8964的話,那就要另外設定成8964)。這樣就完成遠端的機器與控制用機器中間的SSH通道。完成之後,再從控制用機器開啟終端機輸入:
  • ssh localhost -p 55555
輸入遠端帳號的密碼,才能夠透過SSH通道反向連線到遠端的機器

====================== 這是有沒有視窗的分割線 ======================
若要將遠端機器的視窗接過來看,需開啟SSH通道的X forwarding,故遠端的機器指令:
  • ssh -XfNR 55555:localhost:22 ${USER}@${ADDR}
控制用機器反向連回到遠端的機器則是要輸入:
  • ssh localhost -Xp 55555

======================   這是參數介紹的分隔線   ======================
  • -f:要求ssh丟到背景裡面執行
  • -N:不要執行遠端的指令,對於forwarding ports有用
  • -R:port:host:hostport
    Specifies that connections to the given TCP port on the remote (server) host are to be forwarded to the given host and port on the local side. This works by allocating a socket to listen to a TCP port on the remote side.  Whenever a connection is made to this port, the connection is forwarded over the secure channel, and a connection is made to the host port hostport from the local machine.
  • -X:開啟X11 forwarding
  • -p:連線使用的port

參考資料

_EOF_

沒有留言:

張貼留言