루트없이 다른 모든 ssh 연결을 종료하지 않고 ssh 터널을 닫습니다.

martin.macko.47

로컬 포트 ​​(예 : 8888)에서 수신하는 ssh 터널이 있으며 ssh -R 8888:localhost:80 myuser@myhost. 이 터널을 닫을 "myhost"의 "myuser"에 대한 스크립트를 작성해야합니다.

스크립트는 "myhost"에서 "myuser"에 의해 실행됩니다. 루트에 의해 실행되지 않으며 sudo도 할 수 없습니다.

한 가지 상처는 lsof 또는 netstat를 사용하여 8888에서 수신하는 프로세스의 PID를 찾은 다음 프로세스를 종료하는 것입니다. 그러나 lsof와 netstat는 모두 sudo가 아닌 PID를 제공하지 않습니다. netstat를 사용하면 -sudo없이 "PID / 프로그램 이름"대신 얻을 수 있습니다.

루트 권한없이 주어진 포트에서 수신 대기하는 프로세스의 PID를 찾는 방법이 있습니까? 이 포트에서 수신하는 프로세스는 우리와 동일한 사용자로 실행됩니다. 아니면 외부에서 ssh 터널을 닫는 다른 방법이 있습니까?

ssh 이스케이프 시퀀스를 사용하여 연결을 재설정하는 것은 우리가 터널에 있지 않기 때문에 해결책이 아닙니다 . 스크립트는 동일한 사용자가 동일한 호스트에서 터널과 별도로 실행해야합니다.

또한 단순히 실행하는 killall sshd것은 해결책이 아닙니다.이 연결뿐만 아니라 다른 모든 ssh 연결을 종료하기 때문입니다.

이 질문은 내가 찾은 모든 수락 된 답변에 루트 권한이 필요하거나 모든 ssh 연결을 종료하기 때문에 많은 유사한 질문의 중복이 아닙니다.

호스트 "myhost"는 Ubuntu 12.04.5를 실행합니다.


편집 : @Jakuje가 요청한 토론 요약 :

  • @Patrick 은 사용자가 완전한 sudo없이 루트 권한으로 스크립트를 실행할 수 있도록 사용 setuid하거나 수정 하는 방법을 제안했습니다 /etc/sudoers. 하지만 setuid스크립트 대신 바이너리를 작성해야하기 때문입니다. 그러나 사용자가 루트 권한으로 스크립트를 실행하도록 허용하면 잠재적 인 보안 위험이 발생할 수 있습니다. 그리고 여전히이 솔루션은 사용자가 루트 액세스 권한이없는 경우를 다루지 않으므로 /etc/sudoers. @Patrick이 이것을 답변으로 쓰면 확실히 찬성 할 것이지만 아직 수락 표시하지 않을 것입니다.

  • @EricRenouf는 sshd가 사용자에게 소켓을 chown하므로 사용자가 /proc/*/fd소켓이있는 프로세스를 찾는 데 사용할 수 없음 을 발견했습니다. 이것이 아마도 lsof도 netstat도 그것을 표시하지 않는 이유 일 것입니다.

더 많은 아이디어 :

@EricRenouf가 발견했듯이 열린 소켓 포트 번호 나 inode로 sshd PID를 얻을 수있는 방법이 없을 것입니다. 그러나이 sshd PID를 찾는 방법이나 연결을 닫도록 지시하는 방법에 다른 트릭이 없는지 궁금합니다. 아마도 sshd와 직접적으로.

예를 들어, sshd 디버그 모드 sshd -d활성화하면 어떤 sshd 프로세스 /var/log/auth.log가 사용자가 읽을 수 있는 포트에 터널을 연 sshd 프로세스를 기록 합니다. 따라서 스크립트는 로그를 구문 분석하고 거기에서 PID를 찾을 수 있습니다. 그러나 sshd 디버그 모드를 실행하는 것은 좋은 생각이 아닙니다. 실제로 sshd 가 디버그 모드 없이도 열린 터널을 기록 하는 간단한 패치가 있습니다. 하지만 패치 된 sshd를 실행하는 것도 좋은 생각 일지 모르겠습니다.

다른 트릭이 있습니까?

Google 실패

"myhost"에 연결하기위한 사용자 정의 SSH 키를 설정하여 시작하십시오. 그런 다음 "myhost"에서 .ssh / authorized_keys 파일을 편집하여 쉘의 상위 PID가 파일에 기록되도록합니다.

command="echo $PPID > tunnel.pid; bash" ssh-rsa AAA...

보안을 위해 다른 설정을 변경하거나 PID를 작성하고 중단하는 사용자 지정 스크립트를 작성할 수 있습니다. 원칙은 어느 쪽이든 동일합니다.

SSH 세션을 열린 상태로 유지하는 프로세스의 PID가 있으면 스크립팅 문제 일뿐입니다.

kill `cat tunnel.pid`

... 프로세스를 종료하여 SSH 세션을 닫습니다.

당신이 사용할 수 있습니다 -i받는 플래그를 ssh연결에 사용할 수있는 개인 키를 지정하는 명령.

편집 : 활성 연결이있는 경우 셸 프로세스를 종료해도 터널이 닫히지 않으므로 부모 SSH 프로세스를 종료합니다.

편집 : 자동화 된 SSH 연결에 대한 나의 첫 번째 경향은 SSH 키를 사용하는 것이지만 동일한 프로세스를 다음과 같이 에뮬레이션 할 수 있습니다.

ssh -R 8888:localhost:80 myuser@myhost 'echo $PPID > tunnel.pid; for ((;;)); do sleep 1; done'

자체 종료시기를 결정하기 위해 다른 기준을 확인하는 스크립트를 대체 할 수도 있습니다. 이것은 아마도 이것을 처리하는 더 깨끗한 방법 일 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

하나의 명령으로 모든 SSH 연결을 종료하고 PuTTY를 닫습니다.

분류에서Dev

SSH 터널을 사용하여 모든 포트에서 SSH 서버에 연결할 수 있습니다.

분류에서Dev

SSH 터널을 통한 SSH 연결이 계속 닫힙니다.

분류에서Dev

SSH 터미널을 닫으면 nohup이 종료되고 실행할 때 ps / job에 표시되지 않습니다.

분류에서Dev

터미널을 닫지 않고 응답하지 않는 SSH 세션 종료

분류에서Dev

루트에 대한 SSH 터널 오류 : sys_tun_open : 터널을 구성하지 못했습니다 (모드 1) : 작업이 허용되지 않습니다.

분류에서Dev

루트에 대한 SSH 터널 오류 : sys_tun_open : 터널을 구성하지 못했습니다 (모드 1) : 작업이 허용되지 않습니다.

분류에서Dev

로컬 응용 프로그램이 ssh 터널을 통해 Mongo를 연결하지 않습니다.

분류에서Dev

Linux AWS 상자에 SSH를 사용했습니다. AWS 상자에서 실행중인 스크립트를 닫지 않고 터미널을 종료하는 방법은 무엇입니까?

분류에서Dev

SSH 역 터널링을 사용하여 Plex에 연결할 수 없습니다.

분류에서Dev

SSH가 작동하지 않음 : 원격 호스트에서 연결을 닫았습니다.

분류에서Dev

ssh를 제외한 모든 것은 인터넷을 통해 연결되지 않습니다.

분류에서Dev

종료 명령을 보낸 후 ssh 세션이 종료되지 않습니다.

분류에서Dev

SSH 연결이 끊어지면 터미널이 닫힙니다.

분류에서Dev

SSH를 통해 연결할 때 특정 SSH 키 쌍을 사용하고 다른 모든 키를 일시적으로 무시 하시겠습니까?

분류에서Dev

SSH 연결의 "모든 수준"을 종료 하시겠습니까?

분류에서Dev

SSH 연결을 닫은 후 프로세스가 종료되지 않은 이유

분류에서Dev

WSL bash에서 ssh 터널을 사용하여 X 디스플레이에 연결할 수 없습니다.

분류에서Dev

PySide2 : 앱을 종료하지 않고 QMessageBox를 닫을 수 없습니다.

분류에서Dev

클라이언트가 예기치 않게 닫히면 SSH 터널 서버가 수신 포트를 닫을 수 없습니다.

분류에서Dev

Raspberry Pi에 대한 Putty SSH : '원격 측이 예기치 않게 네트워크 연결을 닫았습니다'

분류에서Dev

SSH에서 여러 원격 명령을 실행하고 연결을 닫습니다.

분류에서Dev

SSH 연결을 닫을 때 '종료'만 저장되지 않도록하려면 어떻게해야합니까?

분류에서Dev

SSH는 암호 프롬프트없이 로컬 연결을 만들지 않습니다.

분류에서Dev

다른 터미널에서 명령을 실행하고 명령을 죽이지 않고 닫습니다.

분류에서Dev

konsole 창을 닫지 않고 멈춘 ssh 연결을 어떻게 종료합니까?

분류에서Dev

연결을 모니터링하는 Windows SSH 클라이언트

분류에서Dev

이러한 시스템을 ssh 터널 또는 다른 메커니즘과 연결할 수 있습니까?

분류에서Dev

원격 호스트 Centos 7에서 SSH 연결을 닫았습니다.

Related 관련 기사

  1. 1

    하나의 명령으로 모든 SSH 연결을 종료하고 PuTTY를 닫습니다.

  2. 2

    SSH 터널을 사용하여 모든 포트에서 SSH 서버에 연결할 수 있습니다.

  3. 3

    SSH 터널을 통한 SSH 연결이 계속 닫힙니다.

  4. 4

    SSH 터미널을 닫으면 nohup이 종료되고 실행할 때 ps / job에 표시되지 않습니다.

  5. 5

    터미널을 닫지 않고 응답하지 않는 SSH 세션 종료

  6. 6

    루트에 대한 SSH 터널 오류 : sys_tun_open : 터널을 구성하지 못했습니다 (모드 1) : 작업이 허용되지 않습니다.

  7. 7

    루트에 대한 SSH 터널 오류 : sys_tun_open : 터널을 구성하지 못했습니다 (모드 1) : 작업이 허용되지 않습니다.

  8. 8

    로컬 응용 프로그램이 ssh 터널을 통해 Mongo를 연결하지 않습니다.

  9. 9

    Linux AWS 상자에 SSH를 사용했습니다. AWS 상자에서 실행중인 스크립트를 닫지 않고 터미널을 종료하는 방법은 무엇입니까?

  10. 10

    SSH 역 터널링을 사용하여 Plex에 연결할 수 없습니다.

  11. 11

    SSH가 작동하지 않음 : 원격 호스트에서 연결을 닫았습니다.

  12. 12

    ssh를 제외한 모든 것은 인터넷을 통해 연결되지 않습니다.

  13. 13

    종료 명령을 보낸 후 ssh 세션이 종료되지 않습니다.

  14. 14

    SSH 연결이 끊어지면 터미널이 닫힙니다.

  15. 15

    SSH를 통해 연결할 때 특정 SSH 키 쌍을 사용하고 다른 모든 키를 일시적으로 무시 하시겠습니까?

  16. 16

    SSH 연결의 "모든 수준"을 종료 하시겠습니까?

  17. 17

    SSH 연결을 닫은 후 프로세스가 종료되지 않은 이유

  18. 18

    WSL bash에서 ssh 터널을 사용하여 X 디스플레이에 연결할 수 없습니다.

  19. 19

    PySide2 : 앱을 종료하지 않고 QMessageBox를 닫을 수 없습니다.

  20. 20

    클라이언트가 예기치 않게 닫히면 SSH 터널 서버가 수신 포트를 닫을 수 없습니다.

  21. 21

    Raspberry Pi에 대한 Putty SSH : '원격 측이 예기치 않게 네트워크 연결을 닫았습니다'

  22. 22

    SSH에서 여러 원격 명령을 실행하고 연결을 닫습니다.

  23. 23

    SSH 연결을 닫을 때 '종료'만 저장되지 않도록하려면 어떻게해야합니까?

  24. 24

    SSH는 암호 프롬프트없이 로컬 연결을 만들지 않습니다.

  25. 25

    다른 터미널에서 명령을 실행하고 명령을 죽이지 않고 닫습니다.

  26. 26

    konsole 창을 닫지 않고 멈춘 ssh 연결을 어떻게 종료합니까?

  27. 27

    연결을 모니터링하는 Windows SSH 클라이언트

  28. 28

    이러한 시스템을 ssh 터널 또는 다른 메커니즘과 연결할 수 있습니까?

  29. 29

    원격 호스트 Centos 7에서 SSH 연결을 닫았습니다.

뜨겁다태그

보관