ssh -t가 bashrc 파일을 얻지 못했습니다.

ssh -t가 bashrc 파일을 얻지 못했습니다.
ssh -vvv -F /home/me/.ssh/config serva -t "source ~/.bashrc"

-vvv이것은 플래그를 사용할 때 얻는 출력입니다.

debug1: Authentication succeeded (publickey).                    
debug1: channel 0: new [client-session]                          
debug3: ssh_session2_open: channel_new: 0                        
debug2: channel 0: send open                                     
debug1: Requesting [email protected]                  
debug1: Entering interactive session.                            
debug3: Wrote 128 bytes for a total of 2413                      
debug2: callback start                                           
debug2: client_session2_setup: id 0                              
debug2: channel 0: request pty-req confirm 1                     
debug1: Sending command: source ~/.bashrc                        
debug2: channel 0: request exec confirm 1                        
debug2: fd 3 setting TCP_NODELAY                                 
debug2: callback done                                            
debug2: channel 0: open confirm rwindow 0 rmax 32768             
debug3: Wrote 400 bytes for a total of 2813                      
debug2: channel_input_status_confirm: type 99 id 0               
debug2: PTY allocation request accepted on channel 0             
debug2: channel 0: rcvd adjust 2097152                           
debug2: channel_input_status_confirm: type 99 id 0               
debug2: exec request accepted on channel 0                       
debug1: client_input_channel_req: channel 0 rtype exit-status rep
ly 0                                                             
debug1: client_input_channel_req: channel 0 rtype [email protected]
 reply 0                                                         
debug2: channel 0: rcvd eow                                      
debug2: channel 0: close_read                                    
debug2: channel 0: input open -> closed                          
debug2: channel 0: rcvd eof                                      
debug2: channel 0: output open -> drain                          
debug2: channel 0: obuf empty                                    
debug2: channel 0: close_write                                   
debug2: channel 0: output drain -> closed                        
debug2: channel 0: rcvd close                                    
debug3: channel 0: will not send data after close                
debug2: channel 0: almost dead                                   
debug2: channel 0: gc: notify user                               
debug2: channel 0: output drain -> closed                     
debug2: channel 0: rcvd close                                 
debug3: channel 0: will not send data after close             
debug2: channel 0: almost dead                                
debug2: channel 0: gc: notify user                            
debug2: channel 0: gc: user detached                          
debug2: channel 0: send close                                 
debug2: channel 0: is dead                                    
debug2: channel 0: garbage collecting                         
debug1: channel 0: free: client-session, nchannels 1          
debug3: channel 0: status: The following connections are open:
  #0 client-session (t4 r0 i3/0 o3/0 fd -1/-1 cfd -1)         
                                                              
debug3: channel 0: close_fds r -1 w -1 e 6 c -1               
debug3: Wrote 32 bytes for a total of 2845                    
debug3: Wrote 64 bytes for a total of 2909                         

서버 측 로그에는 다음 메시지가 있습니다. sshd[18763]: Received disconnect from...

CentOS 6.4를 사용하고 있습니다.

편집하다

내 원래 질문에 결함이 있었습니다. 미안합니다. 원하는 rc 파일(~/.bashrc_temp)로 bash 쉘을 실행한 다음 다른 항목을 실행하고 싶습니다. PROMPT_COMMAND가 권장 옵션처럼 보이거나 ~/.bashrc_temp 자체 내에서 명령을 실행하는 것이 이상적이지는 않지만 일부 조건문을 추가할 수도 있습니다.

답변1

이 작업을 수행할 때:

ssh serva -t "source ~/.bashrc"

sshsshd다음과 같이 원격 사용자의 로그인 셸을 호출하도록 지시합니다 .

the-shell -c 'source ~/.bashrc'

이는 쉘이 명령을 실행하고 종료하도록 지시합니다.

아마도 당신이 원하는 것은 대화형 쉘을 실행하고 해당 대화형 쉘이 source ~/.bashrc명령 을 실행하도록 하는 것입니다.그런 다음프롬프트를 발행하고 실행할 명령을 더 읽어보세요.

먼저 의 경우 source ~/.bashrc상호작용할 때 bash소스가 이미 제공되므로 이 작업이 필요하지 않습니다 ~/.bashrc(실제로 의 경우 ssh비대화형인 경우에도 이 작업이 수행됨). 그래서:

ssh serva

충분한.

이제 명령을 실행한 다음 대화형 셸을 실행하려면 다음을 수행할 수 있습니다.

ssh -t serva 'cmd; bash'

( 실행할 명령을 전달할 때 기본적으로 의사 터미널이 시작되지 않기 -t때문에 필요합니다 )ssh

cmd그러나 실행되지는 않습니다 bash(명령줄을 해석하기 위해 sshd(로그인 쉘)에 의해 시작된 쉘에 의해 실행됩니다 cmd; bash ).

bash대화형으로 명령을 실행 하려는 경우 . 한 가지 비결은 bashs 변수를 사용하는 것입니다 PROMPT_COMMAND. bash이 변수의 내용을 각 프롬프트 전에 실행될 쉘 코드로 해석하십시오. 그래서 당신은 이것을 할 수 있습니다 :

ssh -t serva 'PROMPT_COMMAND="cmd; unset PROMPT_COMMAND" bash'

관련 정보