연결된 원격 SSH 호스트에서 로컬 컴퓨터의 명령을 실행 하시겠습니까?


13

SSH를 통해 원격 컴퓨터에 연결했다고 가정 해보십시오. 이 원격 컴퓨터의 프로그램에서 로컬 컴퓨터 (연결 시작 기)에서 명령을 실행해야합니다.

문제는 다음 두 가지입니다. 두 컴퓨터 사이의 기존 연결을 사용하여 로컬 컴퓨터에서 명령을 실행할 수 있습니까?

ssh user@host-of-connecting-party <command>역방향 연결을 설정하기 위해 원격 컴퓨터 에서 명령 을 실행하는 것을 고려했습니다 . 그러나 이것은 자동화하기 어렵고 사용자의 개입이 필요합니다. 나는 그것을 완전히 자동화하거나 적어도 연결된 사용자의 사용자 / 호스트 이름을 감지 할 수 있기를 바랐습니다.


무엇을하고 싶은지 분명합니다. 분명하지 않은 것은 "완전히 자동화하거나 최소한 연결된 사용자의 사용자 / 호스트 이름을 감지 할 수 있기를 바랐습니다."라고 말하는 부분입니다. 무슨 소리 야?
hytromo

"자동화하기 어렵고 사용자 개입이 필요합니다"는이 경우 "보안"과 동의어입니다. 원격 호스트가 연결된 클라이언트에서 명령을 실행할 수 있다면 매우 안전하지 않을 것입니다. 서버가 손상되어 서버에 연결 한 사람은 로컬 컴퓨터가 감염되었다고 가정합니다. 재미있을 것입니다 :)
Sergey

답변:


5

Putty를 통해 VPN 서버에 연결하고 ssh를 통해 다른 호스트에 연결하는 한 VPN과 관련하여 직접 연결할 수없는 경우가 종종 있습니다.

때때로 "ssh-session"을 계속 실행하면서 VPN 서버 시스템에서 무언가를 신속하게 확인해야합니다. 한 가지 방법은 아래 screen에서 ssh 세션을 실행하는 것입니다.이 세션 은 "보통 ssh"와 비교하여 약간의 지연을 추가합니다. 여기서 공유하고 싶은 다른 접근 방식은 다음과 같습니다.

SSH 세션에서 Enter,을 차례로 누른 다음 ~(표시되지 않아야합니다 (예 : 명령 모드에 있음)) Ctrl-을 누르십시오 Z. 이것은 ssh 클라이언트 프로세스를 "호스트"에 배경으로 배치하고 다음과 같은 내용을 따라합니다.

[root@client170 ~]# ~^Z [suspend ssh]

[1]+  Stopped                 ssh root@10.0.0.167
[root@vps291736 ~]#

이제 당신은 "호스트"에 있고, 당신이 원하는 것을 할 수 있습니다 (물론, ssh 세션이 얼마나 오래 유지 될지 확신 할 수 없습니다). 그리고를 실행하여 SSH 세션으로 돌아갑니다 fg.

적어도 CentOS 기반 VM의 Putty를 통해 Win10 워크 스테이션에서 연결되어 있고 해당 VM에서 SSH를 통해 다른 호스트에 연결하는 동안 이것은 저에게 효과적입니다.

그것이 누군가를 돕기를 바랍니다!


2
당신이있는 경우 PermitLocalCommand yes귀하의 .ssh/config호스트를 들어, 당신은 또한 할 수있는 <Enter>~C다음 !<command>.
muru

5

@ 62mkv의 대답은 훨씬 더 나은 솔루션입니다. 사용하십시오.

그러나 완전성과 호기심을 위해 로컬 시스템에서 ssh 서버를 실행중인 경우 포트 20202의 원격 호스트에서 포트 22의 로컬 호스트로 ssh 연결을 허용하는 ssh 터널을 작성할 수 있습니다. 명령 예 :

ssh -R20202:localhost:22 remoteuser@remotehost.com

이것은 ssh 연결을 시작하지만 시스템에서 실행되는 ssh 서버로 다시 터널을 설정합니다. 그런 다음 원격 호스트에 ssh 할 때이 작업을 수행 할 수 있습니다.

ssh -p 20202 localuser@localhost

물론, 특히 기술이 두 번 이상 중첩 된 경우에는 혼동 될 수 있습니다. 로컬 컴퓨터에서 실행하는 모든 것이 원격 호스트를 통해 바운스되기 때문에 약간의 대기 시간도 추가됩니다.

호기심이 아직 충족되지 않은 사람들을위한 ssh 터널링에 대한 추가 정보는 이 유닉스 스택 교환 질문 에 대한 답변에서 찾을 수 있습니다 .


이것은 훌륭한 답변입니다. 정확히 방화벽 뒤에 있고 teamniewer를 통해서만 액세스 할 수있는 원격 시스템에 ssh를 수행 할 수 있어야했습니다. 나는 단순히 teamviewer를 통해 teamviewer 세션에서 ssh 터널을 만드는 내 컴퓨터로 연결 한 다음 컴퓨터에서 원격으로 필요한만큼 많은 ssh 세션을 열 수있었습니다.
Marian

사실, 이것은 @Marian과 같은 터널에 대한 훨씬 더 나은 사용 사례입니다. 나는 이것을 스스로한다.
starbeamrainbowlabs

0

인터넷에서 로컬 컴퓨터와 원격 컴퓨터에 모두 액세스 할 수있는 경우 원격 컴퓨터의 로컬 컴퓨터에서 SSH 세션을 연 다음 해당 세션에서 로컬 컴퓨터의 원격 컴퓨터에서 다른 ssh 세션을 열면됩니다.

localuser@local> ssh remoteuser@remote
Password:
remoteuser@remote> hostname
remote
remoteuser@remote> ssh localuser@local
Password:
localuser@local> hostname
local
localuser@local> exit
remoteuser@remote> exit
localuser@local>

물건을 자동화 하려면 Fabric을 살펴보십시오 (Python 지식 필요)

from fabric.api import *

@hosts('host1')
def clean_and_upload():
    local('find assets/ -name "*.DS_Store" -exec rm '{}' \;')
    local('tar czf /tmp/assets.tgz assets/')
    put('/tmp/assets.tgz', '/tmp/assets.tgz')
    with cd('/var/www/myapp/'):
        run('tar xzf /tmp/assets.tgz')

0

당신은 사용할 수 있습니다 sshpass 명령을 원격 컴퓨터에 연결하고 실행합니다.

./sshpass -p "password" ssh user@remoteIP 'bash -s < EOI "Your Commands go here" EOI'

로컬 컴퓨터에서 간단한 쉘 스크립트를 사용하고 원격 컴퓨터에서 명령을 실행할 때마다 위의 코드를 사용하십시오. 이것은 내가 자동화에서 일반적으로 사용하는 방법 중 하나입니다.


0

아니요, 기존 세션에 참여할 수 없습니다.

응용 프로그램은 클라이언트에 다시 연결하는 방법이 필요합니다. 클라이언트에 SSH 서버가 실행 중이고 서버가 클라이언트의 포트 22에 도달 할 수 있으면 SSH가 작동합니다. 비밀번호 인증 대신 키 기반 인증을 사용하는 경우 자동화하기가 어렵지 않습니다. 이러한 방식으로 사용자 개입이 필요하지 않습니다.

키 기반 인증 설정에 대한 정보는 http://tombuntu.com/index.php/2008/02/20/public-key-authentication-for-ssh-made-easy/ 에서 확인할 수 있습니다.


0

다른 터미널에 액세스 할 수있는 경우 "kill -19 PID"를 사용하여 SIGSTOP을 연결을 시작한 ssh 명령으로 보낼 수 있습니다. 그런 다음 클라이언트 시스템의 터미널에서 터미널을 제어합니다. 완료되면 fg를 입력하여 ssh 클라이언트를 깨우면 ssh 연결을 복원 할 수 있습니다.

그러나 물론 여기서 질문은 : 이미 클라이언트 컴퓨터에 터미널이 있다면 왜 이것을 할 것입니까 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.