전체 로그인 쉘로 원격 ssh 명령 실행 셸을 연 다음 해당 셸

ssh example.com 'ls'그러나 ssh 맨 페이지 당 다음과 같은 작업을 수행하고 싶습니다 .

경우 명령이 지정되어, 그 대신 로그인 쉘의 원격 호스트에서 실행됩니다.

ls결과는 출력 을 표시 한 다음 ssh가 종료됩니다.

내가 알 수없는 것은 전체 로그인 셸을 연 다음 해당 셸 내에서 명령을 실행하는 방법입니다. 명령이 실행 된 후 쉘을 열어 두십시오. 마치 수동으로 다음을 수행 한 것처럼 :

  localhost$ ssh example.com
example.com$ ls
             /folder1
             /folder2
example.com$ _

어떤 아이디어?



답변

bash에게 ls로그인 쉘에서 실행 한 다음 실행하도록 지시하십시오.

$ ssh user@host  -t 'bash -l -c "ls;bash"'

답변

ssh user@host -t 'ls; exec $SHELL -l'

-t의사 터미널 할당을 강제합니다. 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있습니다. 보다 약간 더 적합합니다 bash -i.

exec 새로운 프로세스가 생성되지 않습니다.

-l~ / .bash_profile, ~ / .bash_login 및 ~ / .profile을 순서대로 찾고 명령을 읽고 실행합니다.이 명령을 사용하지 않으면 ~ / bin 디렉토리에서 스크립트 / 명령을 실행할 수 없습니다. ~ / .profile부터는 -l플래그 없이 실행되지 않습니다 .

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

답변

fons의 답변에 대한 귀하의 의견에서을 사용하는 동안 작동하지 않는다고 말합니다 screen.

그것에 대해 자세히 설명해 주시겠습니까? openssh의 소스 코드를 보면 sshd는 다음을 호출하여 명령을 실행합니다.

YOUR_DEFAULT_SHELL -c COMMAND

기본 쉘은 경우에 따라서, 예를 들어 screen, 다음이 아니라 때문에 모든 작동하지 않습니다 screen‘의 -c플래그가 바로 그것보다 우선을 .scrreenrc. 따라서 기본 쉘 인 경우 화면에 명령을 보낼 수있는 방법이 없습니다. 실제로 ssh에 제공된 명령으로 screen을 실행해야하지만 screen이 아닌 기본 쉘을 사용해야 합니다.

그것이 당신이하려고하는 일이라면, screen비 대화 형 프로그램으로 창을 닫을 것이기 때문에 일이 정말로 이상하게 될 것이라고 생각 합니다. 따라서 폰과 비슷한 트릭을 수행해야하지만 한 단계 더 깊이 있어야합니다. SO, 예 / 빈 / bash에와 (그리고 화면) 기본 쉘과 같은 식으로 뭔가 :

ssh user@host -t 'screen bash -l -c "ls;bash"'

심호흡을해야하는 것은 호스트에 ssh를 넣고 screen 명령으로 bash -c를 실행하면 새로운 창이 나타납니다. 이 창이 방금 ls를 열면 종료되고 화면이 종료되므로 새 화면 창 안에 fons의 트릭을 사용 합니다.

그것이 당신이하려는 일조차도 그것이 효과가 있다고 생각합니다.)


답변

ssh에 로컬 tty가없는 경우에도 여러 개의 -t 옵션이 tty 할당을 강제합니다.

ssh -tt user@host 'bash -l -c "/path/to/command'

답변