SSH를 사용하여 원격 서버에서 로컬 애플리케이션을 실행하는 방법은 무엇입니까?

SSH를 사용하여 원격 서버에서 로컬 애플리케이션을 실행하는 방법은 무엇입니까?

SSH 프로토콜을 사용하여 먼 서버에서 로컬 애플리케이션을 실행할 수 있는지 알고 싶습니다.

답변1

다른 컴퓨터의 CPU와 메모리를 사용하여 로컬에 설치된 응용 프로그램을 실행하려면 프로세서가 호환된다는 가정하에 이 방법을 시도해 볼 수 있습니다. 얼마나 잘 작동할지는 모르겠지만 이론은 타당해 보입니다. :) 이것이 작동하려면 원격 서버에 대한 수퍼유저 액세스가 필요할 것입니다.

  • 원격 서버에 SSH 접속

  • 로컬 루트 파일 시스템을 어딘가에 마운트하십시오. 원격 시스템의 관리자를 신뢰할 수 있다고 확신하지 않는 한 이 작업을 전혀 수행해서는 안 됩니다.

    • 이는 서버에서 로컬 시스템으로 SSH를 통해 연결할 수 있는 한 sshfs를 통해 수행할 수 있습니다. 로컬에서 서버로 SSH 접속할 때 설정한 연결을 통해 포트를 다시 전달하면 이 문제를 해결할 수 있다고 생각합니다. 하지만 저는 그런 헛소리를 직접 해본 적이 없습니다.
      • 일반적으로 로컬 시스템이 홈 네트워크에 있는 경우 라우터에서 포트 전달을 설정하면 됩니다. 이 경로를 진행하기 전에 로컬 시스템의 sshd_config에서 비밀번호 로그인을 비활성화하고 서버에서 계정에 대한 비밀번호 문구가 포함된 SSH 키를 생성 scp하고 id_?sa.pub파일을 다시 로컬로 보내 ~/.ssh/authorized_keys. 귀하의 컴퓨터에 SSH로 접속할 수 있는 IP 주소를 제한하는 것도 좋은 생각입니다. 등등.
    • 루트로 실행해야 하는 모든 것을 실행하려면 로컬 파일 시스템에서 sshfs 마운트를 루트로 설정해야 할 것 같습니다. 이는 사람들이 루트로 로컬 상자에 SSH로 접속할 수 있도록 허용해야 한다는 것을 의미하며, 이는 또 다른 모호한 정책 조치입니다. 실제로 이것에 대해 잘 모르겠습니다. chroot 쉘 내에서 sudo를 수행할 수 있습니다.
    • 예를 들어 NFS를 통해 다른 방법으로 마운트할 수 있지만 sshfs는 아마도 보안하기 가장 쉬운 방법일 것입니다. VPN을 통해 이 모든 작업을 수행하는 것이 아마도 더 현명할 것입니다.
  • 파일 시스템을 마운트하고 여전히 서버에 SSH 연결되어 있으면 다음을 수행하십시오.

    chroot /path/to/mount/of/local/filesystem 명령 ARGS

또는 cd디렉토리로 가서 를 실행할 수도 chroot있습니다. 그러면 서버에서 처리가 수행되는 시스템에 일종의 루트 쉘이 있게 됩니다. 첫 번째 형식은 모든 리디렉션이 서버로 수행되므로 출력을 서버 시스템에 편리하게 저장할 수 있다는 장점이 있습니다. 예

chroot /path/to/mount/of/local/filesystem find -iname "somefile" > ~/tmp/somefile.find.out

홈 임시 디렉토리에 "somefile"이라는 파일 목록을 저장합니다.섬기는 사람.

주의사항

적어도 내 관점에서는 이것은 꽤 실험적인 것입니다. 무엇이 잘못될 수 있는지 잘 모르겠지만 몇몇 사람들이 보증하지 않는 한 시도하지 않을 것입니다. 그럼에도 불구하고 나는 프로덕션 시스템에서 그것을 시도하지 않을 것입니다. 내가 IT TV 쇼를 하고 있다면 이 부분에 "집에서 이것을 시도하지 마십시오".

확실히 두 시스템에 호환 가능한 프로세서가 있어야 합니다. 로컬 시스템이 i386이면 서버는 i386 또는 amd64여야 합니다. 또한 서버의 커널이 작업을 수행하므로 서버에서 실행 중인 커널 버전과 작동하는 로컬 앱만 실행할 수 있습니다. 같은 버전이면 더 좋을 것 같습니다. 따라서 로컬 컴퓨터와 원격 서버가 모두 32비트 Debian Squeeze를 실행하고 있다면 문제 없이 작동할 수 있습니다.

추가 참고 사항: 처리할 파일과 응용 프로그램 자체를 포함하여 앞뒤로 전송해야 하는 모든 데이터는 암호화되어 리모컨을 통해 전송되어야 하기 때문에 이런 방식으로 작업을 수행하는 데는 이점이 매우 제한적일 수 있습니다. 연결. 따라서 서버의 우수한 처리 능력을 활용하기 위해 이 작업을 수행하려는 경우 결국에는 많은 것을 얻지 못할 수도 있고 일부를 잃을 수도 있습니다.

답변2

이는 사용하는 용어를 어떻게 정의하느냐에 따라 크게 달라집니다.

  • '응용 프로그램 실행'은 일반적으로 'CPU가 바이너리(".exe") 명령을 처리하도록 하는 것'을 의미합니다.

  • '로컬'은 일반적으로 '내가 앞에 앉아 있는 컴퓨터의 CPU가 코드를 실행하고 있습니다'를 의미합니다.

  • SSH는 정보 스트림을 암호화하는 데 사용됩니다.

그렇다면 그것은 무엇일까요?

  • 로컬 애플리케이션을 로컬에서(CPU를 통해) 실행하고 싶지만 서버에서 상호작용하고 싶나요? 예, SSH를 통해 수행할 수 있습니다. 'Ssh 터널링'을 찾으세요.

  • 로컬 애플리케이션이 서버의 CPU에 의해 처리되기를 원하십니까? 그런 다음 바이너리/로컬 애플리케이션을 서버에 복사한 다음 서버에서 시작해야 합니다. ssh를 사용하여 복사를 수행할 수 있습니다. 그러나 '로컬 애플리케이션'은 복사 후에 더 이상 로컬이 아닙니다.

이전에 CPU에서 코드를 사용할 수 있도록 설정하지 않으면 CPU에서 코드를 실행할 수 없습니다.

답변3

원격 시스템에서 바이너리를 빠르고 간단하게 실행하기 위한 작은 쉘 스크립트:

#!/bin/bash

SOURCE_BIN="/some/path/binary"
DEST_HOST="name-of-system"
DEST_BIN="/another/path/binary"

cat ${SOURCE_BIN} | \
ssh ${DEST_HOST} "cat >${DEST_BIN}; chmod +x ${DEST_BIN}; ${DEST_BIN} with args; rm ${DEST_BIN}"

답변4

한 머신(머신 A)에서 다른 머신(머신 B)이 이미 머신 B에 있는 프로그램을 실행하도록 요청할 수 있습니다. ssh를 사용하면 그렇게 할 수 있습니다.

그리고 컴퓨터 A에서 액세스하여 컴퓨터 B의 설치 파일을 말하고 컴퓨터 A에서 실행할 수 있다고 생각합니다. 그러면 해당 파일이 컴퓨터 A의 RAM으로 전송됩니다. Windows 파일 공유가 그렇게 한다고 생각합니다. (그런데 파일을 이동하거나 복사하지 않으며 파일이 사라지거나 아무데도 나타나지 않습니다. 더 나은 용어는 파일이 RAM에 복사되어 프로세스가 된다는 것입니다. 이는 프로그램이 실행될 때마다 발생합니다. 현지의)

이론적으로 나는 매우 멋진 CPU와 명령이 다른 컴퓨터의 RAM에서 읽을 수 있다고 가정합니다. 네트워크를 통해서도 원할 것입니다. 아마도 기술은 문자 그대로 존재하지만 어디에/무엇인지는 알 수 없을 것입니다.

관련 정보