SSH 프로토콜을 사용하여 먼 서버에서 로컬 애플리케이션을 실행할 수 있는지 알고 싶습니다.
답변1
다른 컴퓨터의 CPU와 메모리를 사용하여 로컬에 설치된 응용 프로그램을 실행하려면 프로세서가 호환된다는 가정하에 이 방법을 시도해 볼 수 있습니다. 얼마나 잘 작동할지는 모르겠지만 이론은 타당해 보입니다. :) 이것이 작동하려면 원격 서버에 대한 수퍼유저 액세스가 필요할 것입니다.
원격 서버에 SSH 접속
로컬 루트 파일 시스템을 어딘가에 마운트하십시오. 원격 시스템의 관리자를 신뢰할 수 있다고 확신하지 않는 한 이 작업을 전혀 수행해서는 안 됩니다.
- 이는 서버에서 로컬 시스템으로 SSH를 통해 연결할 수 있는 한 sshfs를 통해 수행할 수 있습니다. 로컬에서 서버로 SSH 접속할 때 설정한 연결을 통해 포트를 다시 전달하면 이 문제를 해결할 수 있다고 생각합니다. 하지만 저는 그런 헛소리를 직접 해본 적이 없습니다.
- 일반적으로 로컬 시스템이 홈 네트워크에 있는 경우 라우터에서 포트 전달을 설정하면 됩니다. 이 경로를 진행하기 전에 로컬 시스템의 sshd_config에서 비밀번호 로그인을 비활성화하고 서버에서 계정에 대한 비밀번호 문구가 포함된 SSH 키를 생성
scp
하고id_?sa.pub
파일을 다시 로컬로 보내~/.ssh/authorized_keys
. 귀하의 컴퓨터에 SSH로 접속할 수 있는 IP 주소를 제한하는 것도 좋은 생각입니다. 등등.
- 일반적으로 로컬 시스템이 홈 네트워크에 있는 경우 라우터에서 포트 전달을 설정하면 됩니다. 이 경로를 진행하기 전에 로컬 시스템의 sshd_config에서 비밀번호 로그인을 비활성화하고 서버에서 계정에 대한 비밀번호 문구가 포함된 SSH 키를 생성
- 루트로 실행해야 하는 모든 것을 실행하려면 로컬 파일 시스템에서 sshfs 마운트를 루트로 설정해야 할 것 같습니다. 이는 사람들이 루트로 로컬 상자에 SSH로 접속할 수 있도록 허용해야 한다는 것을 의미하며, 이는 또 다른 모호한 정책 조치입니다. 실제로 이것에 대해 잘 모르겠습니다. chroot 쉘 내에서 sudo를 수행할 수 있습니다.
- 예를 들어 NFS를 통해 다른 방법으로 마운트할 수 있지만 sshfs는 아마도 보안하기 가장 쉬운 방법일 것입니다. VPN을 통해 이 모든 작업을 수행하는 것이 아마도 더 현명할 것입니다.
- 이는 서버에서 로컬 시스템으로 SSH를 통해 연결할 수 있는 한 sshfs를 통해 수행할 수 있습니다. 로컬에서 서버로 SSH 접속할 때 설정한 연결을 통해 포트를 다시 전달하면 이 문제를 해결할 수 있다고 생각합니다. 하지만 저는 그런 헛소리를 직접 해본 적이 없습니다.
파일 시스템을 마운트하고 여전히 서버에 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에서 읽을 수 있다고 가정합니다. 네트워크를 통해서도 원할 것입니다. 아마도 기술은 문자 그대로 존재하지만 어디에/무엇인지는 알 수 없을 것입니다.