PS1 프롬프트를 ssh로 푸시


19

내가 좋아하는 특정 "PS1"프롬프트를 사용합니다. 몇 개의 다른 서버에서 다른 사람들과 몇 번의 로그인을 공유합니다. 로컬 bash 프로필에 원격 프롬프트를 지정하는 방법이 있는지 또는 원격에있을 때마다 복사하여 붙여 넣을 수있는 다른 방법이 있는지 궁금합니다.

답변:


17

예를 들어 ~/.my_custom_bashrc, 사용자 정의 bash구성을 사용하여 각 원격 시스템에 파일을 업로드 한 PS1=...후 다음 ssh과 같이 시작하십시오 .

ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"

bash가독성을 위해 랩퍼 로 함수를 쉽게 사용할 수 있습니다 .


10

PS1변수 를 보내고 싶은데 변수에 '(작은 따옴표)가 포함되어 있지 않으면 다음을 시도하십시오.

ssh targethost -t "PS1='$PS1'; exec bash"

그러나 현지인 .bashrc은 덮어 쓸 수 있습니다 PS1( Dennis Williamson 이 이것을 지적 해 주셔서 감사합니다 ).

ssh를 통해 환경 변수를 전송 하는 방법이 있지만 일반적으로 서버 구성에서 비활성화됩니다. 는 IF PermitUserEnvironment지시어가 활성화되어 서버 구성 및 각 사용자 (예, 당신은 정말 운이되지 않을 수도 있습니다) 자신의 키 쌍을 가지고, 당신은 추가 할 수 environment="PS1=…"있는 라인에 ~/.ssh/authorized_keys당신의 키에 대응.

공유 사용자 계정에 고유 한 구성을 유지하려면 고유 한 구성 파일 디렉토리를 작성 HOME하고 해당 디렉토리를 가리 키도록 환경 변수를 설정할 수 있습니다.

ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/

mrstatic.home다른 사용자와 파일을 공유하려는 경우 상위 디렉토리의 해당 항목을 다시 가리키는 디렉토리에 기호 링크를 작성하십시오 .

그런 다음 로그인

ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`

원격 .profile(또는 다른 초기화 파일) 을 수정하려는 경우 설정을 자동화 할 수 있습니다. 많은 사이트에서 LC_*환경 변수를 허용 합니다 (일반적으로 로케일 설정에 사용됨). 이 두 조건이 모두 충족되면 LC_USER클라이언트 측에서 로케일에 실제로 사용되지 않는 변수를 설정 하고 서버에서 테스트 할 수 .profile있습니다.

(물론 공유 계정은 나쁜 생각이지만 그 상황을 바꿀 위치에 있지 않을 수도 있습니다.)


3
ssh -t user@host "remote='$PS1' bash -i"

그런 다음 프롬프트에서 다음을 수행하십시오.

PS1=$remote

1
인용되지 않으면 정교한 bash 프롬프트가 중단 될 수 있습니다 (놀랍습니다). 그리고 왜 추가 명령이 아닌 "PS1='$PS1' bash -i"왜 (그리고 왜 그렇게하지 exec않습니까)?
Gilles 'SO- 악의를 멈춰라'

1
@Gilles : 인용 부족 : 부패. 추가 명령 : PS1셸 시작 중에 덮어 쓰는 것은 드문 일이 아닙니다 . exec 없음 : 내 시스템에서 테스트하는 동안 아무런 차이가없는 것 같습니다-추가 프로세스가 없습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

1
아, 그렇습니다. 좋은 지적입니다. 현지인 .bashrc이 덮어 쓸 가능성이 높습니다 PS1.
Gilles 'SO- 악의를 멈춰라'

2

PS1 프롬프트를 ~ / .ssh / environment에 넣고 ssh 세션은 로그인하는 모든 호스트로 전달합니다. openssh 4.3p2에서 작동합니다.


1
이것은 서버 구성이 활성화 된 경우에만 작동 PermitUserEnvironment하며 기본적으로 꺼져 있습니다.
Flimm

1

클라이언트 측에서 환경 변수를 지정할 수 있으며 ssh-server에서 허용하는 경우 (man sshd-config 확인) 이러한 변수는 시스템에 로그인 할 때 세션에 복사됩니다.

따라서 서버에서 .bashrc를 구성하여 기존 PS1 (또는 변수)을 확인하고 아직 설정되지 않은 경우 PS1 만 설정해야합니다.

또는 더 간단하게 만들려면 설정을 함수 ..로 묶고 해당 기능을 요청시 소스 파일 ( source joes_bashrc) 또는 .bashrc에 직접 특수 파일로 배포하십시오 . 자신의 파일을 갖는 것이 좀 더 강력 해 보입니다. 다른 사람들이 당신의 설정을 사용할 수도 있지만 그렇게하지는 않을 것입니다.


1

로그인을 공유하지 마십시오. 자신과 같은 SSH는, 다음을 수행 sudo -su shareduser( -s수단 "쉘").

확인 sudo홈 디렉토리를 유지 :

Defaults env_keep += "HOME"

내가 승진하면 나는 그 정책을 시도하고 시행 할 것이지만 지금은 이것에 붙어 있습니다.
Unfundednut

1

여분의 scp가 필요없이 그것을하고 싶다면 다음과 같이 할 수 있습니다 :

ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'

서버 bashrc를 기반으로하지만 재정의로 .bashrc.n을 생성합니다.


이것이 일부 사람들이 터미널을 두려워하는 이유입니다.

0

동료에게 눈에 띄지 않게 침입하고 자신의 선호도를 방해하지 않는다고 믿을 수 있다면 cYrus의 답변 , akira의 답변Dennis Williamson의 답변을 조합하여 제안합니다 .

  1. 각 서버에서 편집 ~/.bashrc및 추가
    if [ "$ Unf"= 1] # Unfundednut의 특수 코드
    그때
        PS1 = " (원하는 프롬프트) "
         (원하는 다른 사용자 정의) 
    fi
    끝에. 동료들은“기본 프로필을 작성해 주셔서 감사하지는 않지만”찾아 보지 않으면이를 알지 못합니다.
  2. 원격 서버에 로그인 할 때
    ssh -t 사용자 @ 호스트 "Unf = 1 bash -i"
    로컬 계정의 별칭 또는 셸 함수에 넣기를 원할 수도 있지만 다른 답변보다 짧아서 수동으로 쉽게 입력 할 수 있습니다.

나는 이것이 분명하다고 생각하지만, ssh명령은 Unf변수가 로그인 할 때 원격 서버에서 설정되도록합니다. 그러면 remote에서 코드가 호출되어 .bashrc사용자 정의가 적용됩니다. 의 끝에 코드를 넣었으므로 .bashrc파일의 앞부분에있는 일반 설정보다 우선합니다.

공개 : 나는 이것을 테스트하지 않았습니다.


-1

가장 쉬운 방법은 IMHO입니다.

ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'

나는 그것이 확실하지 않다; 따옴표 레이어가 누락 된 것 같습니다. 그렇게하더라도 설정 PROMPT_COMMAND(쉘이 프롬프트를 발행 할 때마다 실행 됨)은이 문제를 해결하는 데 매우 어려운 방법 인 것 같습니다. 그리고 그것은 다소 비전 적이기 때문에 실제로 어떻게 작동하는지에 대한 설명이 있어야한다고 제안하는 대답이 있습니다.
스콧

-2

sshfs / nfs에 집을 설치하는 것과 같은 일을 할 수 있지만 가장 쉬운 해결책은 bashrc를 새 컴퓨터로 scp하는 것입니다. 이것은 또한 별칭과 물건을 가져옵니다.


내 질문에 언급 했듯이이 로그인을 다른 사람들과 공유합니다. 나는 그들이 기본 프로필을 작성해 주셔서 감사하지 않을 것이라고 확신합니다.
Unfundednut

1
NFS를 통한 $ HOME 마운트는 제정신이 아닙니다. 그냥 말해
웨슬리 라이스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.