SSH를 통해 원격/호스트(동일 네트워크/LAN)에 연결된 컴퓨터는 인터넷에 액세스할 수 있지만 호스트는 액세스할 수 없습니다.
호스트 시스템에서 업데이트를 실행하고 패키지를 설치하는 것은 에이전트를 로컬로 시작한 다음 이를 사용하도록 원격 시스템을 구성해야 하기 때문에 매우 불편합니다.
SSH 등을 통해 이 작업을 수행하는 더 쉬운 방법이 있는지 궁금합니다.
나는 복잡성을 알고 있지만 알고 싶습니다.
Emacs를 통해 사용하십시오 plink
(중요한 경우).
답변1
우리는 인터넷에 접속할 수 있는 기계 hasinet
와 그렇지 않은 기계를 지칭합니다 noinet
.
SSH 연결을 설정할 수 있는 경우~에서 noinet
도착하다 hasinet
OpenSSH에 내장된 SOCKS 프록시를 사용하면 이 작업을 쉽게 수행할 수 있습니다. 이 명령은 noinet
수신 포트에 SOCKS 프록시를 설정합니다 1080
.
noinet$ ssh -D 1080 hasinet
SSH 연결만 설정할 수 있는 경우도착하다 noinet
~에서 hasinet
SOCKS 프록시에서 OpenSSH를 실행 한 다음 에서 hasinet
포트를 전달할 수 있습니다 . 이 작업은 다음과 같은 단일 명령으로 깔끔하게 수행할 수 있습니다(@Patrick에게 감사드립니다).noinet
hasinet
hasinet$ ssh -D 1080 localhost -t ssh -R 1080:localhost:1080 noinet
SOCKS 프록시를 사용하는 방법
이 프록시가 사용되는 방법은 애플리케이션에 따라 다릅니다. 일부 애플리케이션은 내장 SOCKS 프록시를 지원합니다. 이 경우 애플리케이션을 on 으로 구성해야 합니다 localhost:1080
. 그렇지 않은 경우 @sciurus가 제안한 대로 프록시체인이나 redsock을 사용할 수 있습니다.양말특정 명령에 대해서만 네트워크 액세스가 필요한 경우 이는 보다 가벼운 솔루션입니다.
답변2
-R
내장되어 있고 @smammy가 제안한 긴 명령이 필요하지 않은 SOCKS4/5 동작과 함께 플래그를 사용할 수 있습니다 .
[hasinet]$ ssh -R 1080 noinet
다음과 같은 프록시를 사용할 수 있습니다.
[noinet]$ curl -x socks5h://127.0.0.1:1080 http://www.google.it
-R
이는 대상 호스트가 제공되지 않으면 이 플래그가 SOCK4/5 프록시로 대체되기 때문에 작동합니다 . 남자 SSH에서 :
-R [bind_address:] port:host:hostport
-R [bind_address:] port
Specifies that connections to the given TCP port or Unix socket on the remote (server) host are to be forwarded to the local side.
This works by allocating a socket to listen to either a TCP port or to a Unix socket on the remote side. Whenever a connection is made to this port or Unix socket, the connection is forwarded over the secure channel,
and a connection is made from the local machine to either an explicit destination specified by host port hostport, or local_socket, or, if no explicit destination was specified, ssh will act as a SOCKS 4/5 proxy and for‐
ward connections to the destinations requested by the remote SOCKS client.
[snip]