SSH 연결 후 연결을 끊지 않고 명령을 실행하는 방법은 무엇입니까?

SSH 연결 후 연결을 끊지 않고 명령을 실행하는 방법은 무엇입니까?

SSH 세션을 자동으로 닫지 않고 SSH를 통해 다른 컴퓨터에 연결한 후 자동으로 명령을 실행하고 싶습니다.

인터넷을 검색한 후 몇 가지 해결책을 찾았지만 그 중 어느 것도 내가 원하는 방식으로 작동하지 않았습니다.

ssh bla@bla "ls"

그러면 원격 시스템에서 명령이 실행되고 ls출력이 표시되며 연결이 닫힙니다.

또한 다음을 사용하여 SSH 구성 파일을 편집해 보았습니다.

Host bla
        HostName bla
        User bla
        IdentityFile ~/.ssh/key
        RemoteCommand ls
        RequestTTY force 

같은 문제입니다. SSH를 통해 연결하고 ls명령을 실행하고 출력을 표시한 다음 종료합니다. 이 RequestTTY옵션도 도움이 되지 않습니다.

ssh bla@bla "ls ; bash"

실행 후 연결이 끊어지지 않지만 ls전체 터미널 인터페이스가 표시되지 않고 일부만 표시되지 않습니다 me@machine:~$ thing.

내가 정말로 원하는 것:

bash 별칭 또는 .ssh/config원격 시스템에 연결하는 간단한 명령을 입력한 다음 거기에서 명령을 실행하고 터미널을 열어 둘 수 있는 항목입니다. 기본적으로 내가 손으로 하는 것과 같습니다.

유형

ssh blah@blah

그런 다음 연결되면 입력합니다.

ls

답변1

ssh bla@bla "ls ; bash"

실행 후 연결이 끊어지지 않지만 ls전체 터미널 인터페이스가 표시되지 않고 내용이 표시되지 않는 몇 가지 간단한 명령줄만 표시됩니다 me@machine:~$.

ls ; bash위와 같은 명령을 지정하면 SSH 서버는 의사 터미널을 제공하지 않습니다. 당신은 이것을 관찰했습니다.

반면, 단독에는 ssh bla@bla기본적으로 의사 터미널이 할당됩니다. 이것이 당신이 원하는 것입니다. 의사 터미널 할당을 강제하려면 -t또는 를 사용합니다 RequestTTY.

RequestTTY옵션도 도움이 되지 않습니다.

단순한 원격 명령이라면 도움이 되지 않습니다 ls. 필요 ls; bash하거나 유사합니다.

tty를 요청할 때 요청하지 않는 것 같습니다 bash. bash이후에 요청 하면 lstty를 요청하지 않습니다. 다음 두 가지가 모두 필요합니다.

ssh -t bla@bla "ls; bash"

의사 ls터미널도 사용됩니다. "더 넓은 그림" 섹션을 읽어보세요.내 대답차이점을 알아두십시오(특히 "특이한 점이 있음" 부분).

답변2

me@machine을 제거하려면 PS1 환경 변수를 설정해야 합니다. 노력하다:

ssh bla@bla "PS1=\"\"; ls; bash"

관련 정보