로컬 호스트에서 일부 원격 호스트:포트를 로컬 호스트:포트로 SSH 터널링하고 있으므로 원격 호스트의 누구든지 "로컬" 포트를 사용하여 해당 터널을 통해 내 포트에 액세스할 수 있습니다.
이를 위해 두 호스트 모두에서 일반(루트가 아닌) 사용자 계정을 사용하고 있습니다.
예: 내 로컬 호스트의 Tunnelingdaemon은 Tunnelingdaemon@remotehost를 사용하여 연결 ssh -R 127.0.0.1:2222:127.0.0.1:22 remotehost ...
하고 원격 호스트에서 포트 2222를 열고 이를 내 로컬 호스트의 포트 22에 연결합니다.
원격 호스트의 루트는 netstat
, lsof
또는 를 사용하여 fuser
해당 포트 2222를 열고 터널링한 프로세스의 PID를 찾을 수 있습니다. 그러나 일반 사용자(tunnelingdaemon)는 그렇게 할 수 없습니다.
예를 들어
뿌리:
root@remote_host:/# fuser 2222/tcp
2222/tcp: 13709
root@remote_host:/#
터널링데몬:
tunnelingdaemon@remote_host:/$ fuser 2222/tcp
tunnelingdaemon@remote_host:/$
원격 호스트에서는일반(tunnelingdaemon) 사용자로서 해당 프로세스를 종료할 수 있습니다.그 아래에는 애초에 터널이 열렸지만어떤 프로세스를 종료해야 하는지 찾으려면 루트여야 합니다..
그게 문제야. 이에 대한 해결책을 찾아야 합니다.
답변1
예: 포트 "8889":
lsof -i -P | grep 8889
나를 위해 작동합니다.
그런 다음 PID를 종료할 수 있습니다(출력의 두 번째 열).
답변2
ss
스위치를 사용해 볼까요 -p
? root
이 명령을 실행하기 위해 권한을 올릴 필요는 없습니다 .
에서man ss
-p, --processes Show process using socket.
예:
ss -p | grep dropbox
u_str ESTAB 0 0 * 25994 * 25995 users:(("dropbox",pid=1869,fd=22))
답변3
PID 파일을 작성할 수 있습니다.
ssh ... 'echo $(/bin/ps -p $$ -o ppid --no-headers) >~/ssh.pid; read cont'