SSH를 통해 로그인하고 명령을 실행하지만 bash를 종료하고 싶지 않습니다.

SSH를 통해 로그인하고 명령을 실행하지만 bash를 종료하고 싶지 않습니다.

SSH를 통해 다른 CentOS로 접속할 때 PS1을 변경하고 싶습니다.

    strshell = 'PS1="remote!"'
    os.system("ssh -i %s -l%s -p%s %s %s"%(SSH_KEY,SSH_USER,SSH_PORT,des,strshell))  

SSH가 자동으로 종료됩니다. 나는 이 껍질 안에 머물고 싶다. 달성하는 방법.

방금 다른 방법으로 바꿨어요

 tin = ' sudo -i ; export PS1="Remote! \W :"; exec /bin/bash -i'
 os.system("ssh  -i%s -l%s -p%s %s -t%s" % (SSH_KEY, SSH_USER, SSH_PORT, des, tin))  

그런데 원격 컴퓨터 프롬프트 대신 로컬 컴퓨터 프롬프트를 변경했습니다. 왜?
os.system은 파이썬 함수입니다

답변1

sudo -i대상 사용자로 로그인 쉘을 실행하십시오. 나머지는 export PS1...쉘이 종료된 후에만 실행됩니다.

또한 ~/.bashrcPS1을 재정의하여 환경에 전달할 수도 있는데 이는 도움이 되지 않을 수 있습니다.

당신은 시도 할 수 있습니다:

ssh -t host 'sudo env PROMPT_COMMAND="PS1=\"Remote! \W: \"
             unset PROMPT_COMMAND" bash -l'

(대상 사용자가 ~/.bashrc이것을 설정하지 않았다고 가정 $PROMPT_COMMAND).

답변2

이것은 작동하는 것 같습니다:

ssh -t localhost "echo '. /dev/fd/2'|sudo bash -sil 2<<\FILE        
PS1='my prompt : '
exec 2>/dev/tty
exec </dev/tty
FILE
"
[sudo] password for mikeserv: 
my prompt : id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),19(log)
my prompt : 

sudo기본적으로 0,1,2를 제외한 모든 파일 설명자는 닫히고 <&0터미널에 비밀번호가 필요하지만 일반적으로 하이재킹을 통해 몰래 지나갈 수 있습니다 stderr. 어쨌든 영원히 사라진 것은 아닙니다. 사실 제가 위에서 가장 먼저 한 일은 ssh터미널에 다시 연결하는 것이었습니다. 보다 현실적으로, $(cat file)제가 $PS1정의한 것과 나머지 부분 처럼 작업할 실제 스크립트가 몇 가지 있을 것입니다 . 하지만 이는 매우 귀찮은 간접적인 방법이므로 원격 구성 파일에서 필요에 따라 처리하는 것이 가장 좋습니다.

관련 정보