Как я могу убедиться, что перенаправление портов установлено, проверив сокеты?

Por lo general, esto se puede hacer con expect. Puede hacer que recupere la contraseña del entorno, pásela a base64y recupere la salida. Luego genere el ssh, espere el indicador $del shell y envíele el comando sudo. Cuando se vea la solicitud de contraseña de sudo, envíe la contraseña decodificada, luego continúe dentro de lo esperado de la manera habitual con interact. Coloque lo siguiente en un archivo y hágalo ejecutable, luego llámelo con su nombre de host como argumento.

#!/usr/bin/expect -f
# https://unix.stackexchange.com/a/422651/119298
log_user 0
spawn base64 -d
send $env(mypword)\n\x04
expect -nobrace -re "\n(.+)$"
close
set output $expect_out(1,string)

spawn ssh -q -t [lindex $argv 0] 
expect {$ }
send "sudo echo hi\n"
expect -nobrace -re {.sudo. password.*:}
send "$output\n"
expect "\n"
interact
3
05.02.2019, 15:22
2 ответа

Как только SSH-соединение будет установлено, вы увидите прослушивающий сокет на порту 9000 :

.
$ ss -o state listening 'sport = 9000'
Netid Recv-Q Send-Q         Local Address:Port                          Peer Address:Port
tcp   0      128                127.0.0.1:9000                                     *:*
tcp   0      128                      ::1:9000                                    :::*

Вы не увидите подключения к google.com, пока не будет установлено подключение к порту 9000; бежать

$ nc localhost 9000

, затем в другом терминале вы увидите что-то вроде

$ ss -o state established 'dport = 80'
Netid Recv-Q Send-Q         Local Address:Port                          Peer Address:Port
tcp   0      0                 10.10.10.2:34948                       216.58.204.142:http

с одноранговым адресом, принадлежащим Google.

2
28.04.2021, 23:37

Есть много дополнительных способов сделать это:

На вашем локальном компьютере

Вы можете запустить свою команду sshс опцией -v, и там будет информация о переадресации:

debug1: Local connections to LOCALHOST:9000 forwarded to remote address google.com:80
debug1: Local forwarding listening on ::1 port 9000.
debug1: channel 0: new [port listener]
debug1: Local forwarding listening on 127.0.0.1 port 9000.
debug1: channel 1: new [port listener]

Запустите netstat -tulpn, и вы должны увидеть, есть ли запись с ssh, работающая на порту 9000. Это показывает порты прослушивания. Он не показывает активно переадресованные соединения!

# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      15557/ssh

На удаленной машине

В текущем открытом сеансе, который перенаправляет порты, просто быстро нажмите ~#, и вы должны увидеть, использует ли что-либо ваш туннель прямо сейчас (вы можете попробовать подключиться к вашему локальному хосту :9000 с помощью команды telnetи посмотреть что происходит ).

The following connections are open:
  #2 client-session (t4 r0 i0/0 o0/0 e[write]/4 fd 6/7/8 sock -1 cc -1)
  #3 direct-tcpip: listening port 9000 for google.com port 80, connect from 127.0.0.1 port 57060 to 127.0.0.1 port 9000 (t4 r1 i0/0 o0/0 e[closed]/0 fd 9/9/-1 sock 9 cc -1)

Также netstat -tulpnдолжен сообщить вам об открытых портах на этой машине, но нет гарантии, что эти открытые порты являются теми, которые вы сделали при подключении. Большую часть времени у вас не будет root-доступа к удаленному компьютеру, поэтому вы не сможете проверить PID сеанса SSH и PID в результатах netstat.

2
28.04.2021, 23:37

Теги

Похожие вопросы