SSH- 서버, 명령 실행 및 연결 유지


12

다른 탭이있는 터미널을 열고 ssh각 탭에서 서버에 로그온 한 다음 각 탭에서 명령을 실행하는 스크립트를 작성하고 싶습니다 . 예를 들면 다음과 같습니다 htop..

아래 스크립트는 서버에 모두 로그인 된 4 개의 탭이있는 터미널을 엽니 다. 그러나 줄에 htop명령 을 추가하려고하면 cmd=더 이상 작동하지 않습니다 ...

#bin/bash

tab="--tab"
cmd="bash -c 'ssh user@host';bash"
foo=""

for i in 1 2 3 4; do
      foo+=($tab -e "$cmd")         
done

gnome-terminal "${foo[@]}"

exit 0

나는 이것을 시도했다 ...

cmd="bash -c 'ssh user@host htop';bash"

... ssh --help의 구문 ssh은 다음과 같습니다.

사용법 : ssh [user @] 호스트 이름 [명령]

답변:


14

가장 간단한 형태로 :

ssh -t user@host "command; bash"

-t여기서 중요한 부분입니다. 호스트가 프로세스에 가상 터미널을 할당하도록하여 호스트가 계속 열려있게합니다.

많은 서버에서 bash중단 을 실행하려는 경우 마지막에 생략을 할 수 있지만 중단을 중단하면 로컬 터미널로 다시 연결됩니다.


cmd = "bash -c 'ssh -t user @ host htop'; bash"를 시도했습니다. 그것은 작동하지만 내가 멈춰 나가면 로컬 터미널로 돌아가서 이런 일이
Red

1
@Red 당신의 인용구를 확인하십시오-그들은 모든 곳에서 있습니다-당신은 htop과 bash를 함께 그룹화하여 모두 원격 서버에서 실행되도록해야합니다. bash -c 'ssh -t user@host "htop;bash"'더 좋을 것입니다. 그러나 왜 당신이 왜 이것을 bash 래퍼로 튀기려고하는지 모르겠습니다. 필요하지 않습니다-로컬로 하나의 명령 만 실행 중입니다.
Oli

감사합니다. 이제 cmd = "ssh -t user @ host htop; bash"와 함께 작동합니다.
Red

좋은 대답이지만 종료하지 않으려면 bash보다 더 나은 것이 있어야합니다.
mc0e

@ mc0e 수행하려는 작업에 따라 다릅니다. 이 질문은 명령을 실행 한 후 유용한 쉘을 얻는 것에 관한 것입니다. 그냥 일시 정지하려는 경우, 당신은 대체 할 수 bash에 대해 read.
Oli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.