로컬(NAT 라우터 및 방화벽 뒤의 로컬 네트워크) Ubuntu 시스템과 공개적으로 액세스 가능한(Ubuntu) 서버가 있습니다. 내 로컬 컴퓨터에서 서버로의 연결을 시작한 다음 서버의 로컬 컴퓨터에서 특정 Python 스크립트(다른 명령이나 스크립트 없음)를 실행하고 싶습니다. 하지만 문제는 이 Python 스크립트를 나중에 언제든지 실행하고 싶다는 것입니다. 때로는 각 실행 후 여러 번 실행하기도 합니다. 내 첫 번째 아이디어는 SSH 터널이었습니다(내 로컬 컴퓨터에서 수행).
ssh user@remoteserver -R 21000:127.0.0.1:8081
하지만 그것은 나에게 아무런 유익이 되지 않습니다. 다음 시도는 이 답변입니다여기. 그러나 이는 연결 시 스크립트를 실행한 다음 실행 후 연결을 끊습니다.
마지막으로 제 질문은 다음과 같습니다. SSH 명령이 연결될 때뿐만 아니라 요청 시 로컬 시스템에서 Python 스크립트를 실행할 수 있도록 로컬 시스템에서 서버에 대한 보안 연결을 어떻게 설정합니까?
(뭔가 너무 혼란스러운 경우 알려주시면 질문의 일부를 다시 설명하겠습니다.)
답변1
몇 가지 옵션이 있습니다. 여기에서 시작하세요.
ssh -N -R 21000:127.0.0.1:22 user@remoteserver
그러면 로컬 SSH 서버에 대한 터널이 생성됩니다(표준 포트에서 실행 중이고 수신 대기 중이라고 가정 22
). localhost:21000
연결할 수 있는 사람은 누구나 remoteserver
SSH 서버에 연결됩니다(따라서 연결하는 데 사용해야 합니다 ssh
). 인증, 로그인 및 셸을 얻으면 일반적으로 Python 스크립트를 포함한 명령을 실행할 수 있습니다.
바라보다내 대답외부에서 접근권한을 부여하고 싶은 경우 remoteserver
.
로컬 루트 액세스를 사용하면 다음을 조정할 수 있습니다.
- 전용 사용자를 생성하고 당사자가 해당 사용자로 인증하도록 할 수 있습니다.
- 제한된 쉘을 사용자의 로그인 쉘로 사용하여 사용자가 수행할 수 있는 작업을 제한할 수 있습니다.
- 사용자의 로그인 쉘이 선택한 Python 스크립트를 자동으로 실행하도록 할 수 있습니다.
- 아니면 스크립트를 만들 수도 있습니다예첫 번째는 사용자의 로그인 쉘입니다.
로컬 SSH 서버가 인증을 처리하므로 이 방법이 가장 이상적일 것입니다. 통행인은 스크립트를 실행할 수 없습니다.
ssh
-t
클라이언트가 및 옵션( , )을 사용하여 터널에 연결하는 방식에 유의하고 -T
서버(예: 이 경우 로컬 시스템)에 tty가 할당되어 있는지 확인하세요.
또는 Python 스크립트를 사용 가능하게 만들 수 있습니다.내 다른 답변은 다음과 같습니다.. 초기 명령은 다음과 같습니다.
# on your local machine
socat TCP-LISTEN:50011,fork EXEC:'/path/to/script',stderr,pty,echo=0
(참고: man 1 socat
이 옵션만 사용하여 바인딩할 수도 있습니다.)127.0.0.1
bind=
그런 다음 로컬 포트에 대한 터널을 만듭니다 50011
.
ssh -N -R 21000:127.0.0.1:50011 user@remoteserver
여기에 연결하는 사람 localhost:21000
은 누구나 remoteserver
인증 없이 스크립트에 액세스할 수 있습니다. 예를 들어 연결에 사용할 수 있습니다 nc
.