내 로컬 호스트에서 내 로컬 호스트:포트로 일부 원격 호스트:포트를 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'