Shell-Script

如何在 shell 腳本(netcat)上將文本作為程式碼從伺服器執行到客戶端

  • February 13, 2018

我有兩個文件,client.sh所有server.sh必要的數據都在伺服器上,使用netcat發送到客戶端,客戶端只是獲取這些數據並將其顯示給最終使用者,問題是當伺服器發送一些多行程式碼時,客戶只是將其作為文本接收並顯示在螢幕上

client.sh

ip=127.0.0.1
client_port=5678
server_port=8765

while :
do
       # Request the menu from the server
       echo menu > /dev/tcp/"$ip"/"$server_port"
       # Waits the server response
       nc -l $porta_cliente
done

server.sh

ip=127.0.0.1
porta_cliente=5678
porta_servidor=8765

while :
do
       nc -vv -l $porta_servidor > logservidor
       echo "Texto recebido: "`cat logservidor` # LOG
       case `cat logservidor` in
       "splash")
               echo "dialog --stdout --msgbox 'SPLASH' 0 0" > /dev/tcp/"$ip"/"$porta_c$
       ;;
       "menu_inicial")
               nc $ip $porta_cliente <<-EOF
                       dialog --stdout --backtitle 'Bem vindo ao SEPA 0.1' --title 'Me$
                       Cadastrar 'Criar um novo usuário' \
                       Entrar 'Fazer login com sua conta' \
                       Sair 'Encerrar o SEPA'

                       # Caso o usuário selecione Cancelar, a execução do script será $
                       if [ $? -eq 0 ]; then
                               echo SUCESSO
                       else
                               rm resposta_servidor dados_digitados 2> /dev/null
                               clear
                               exit
                       fi
               EOF
       ;;
       "menu_principal")
               echo "dialog --msgbox 'MENU_PRINCIPAL' 0 0" > /dev/tcp/"$ip"/"$porta_cl$
       ;;
       *)
               dialog --msgbox 'WTF?!' 0 0 > /dev/tcp/"$ip"/"$porta_cliente"
       ;;
       esac
done

您可以將 netcat 的輸出通過管道傳輸到 shell

nc -l $porta_cliente | sh

但是,在沒有任何身份驗證的套接字上,要格外小心,因為這可能允許任何人在客戶端電腦上執行任意程式碼

這種方法是非常糟糕的做法,您應該考慮不同的方法。

您還可以將您的文本從 netcat 連接重定向到文件,然後將其作為命令執行,使用source

例子:

nc -l 8765 > command
source command

引用自:https://unix.stackexchange.com/questions/423826