하나의 명령으로 모든 SSH 연결을 종료하고 PuTTY를 닫습니다.


19

모든 SSH 연결을 취소하고 "원샷"으로 PuTTY 를 닫을 수있는 방법이 있습니까? Windows 7에서 작업하고 PuTTY를 사용하여 다양한 Linux 호스트에 SSH로 연결합니다.

내가 일하는 방식의 예 :

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
banjer@host1:~> exit
Putty closes.

위와 같이 한 번에 host8에서 PuTTY를 종료하는 방법은 무엇입니까? 때때로 나는 최대 5 명에서 10 명까지 호스트를 찾습니다. X를 클릭하여 PuTTY 창을 닫을 수 있다는 것을 알고 있지만 exit 명령을 사용하여 SSH 연결이 올바르게 닫히고 싶습니다. 또한 게으름을 증가시키는 방법에 대한 팁을 요청하고 있음을 알고 있습니다. 그냥 "어떻게하면 더 효율적일 수 있을까요?"라고 쓰겠습니다.


6
직접 묻는 것이 아니라 ctrl+d여러 번 누르는 것은 어떻 습니까?
Ulrich Dangel

@UlrichDangel 이전에는 사용하지 않았지만 연결을 신속하게 철회하는 빠른 방법도 있습니다.
Banjer

2
ssh 세션을 5-10 레벨 깊이 중첩합니까? 그것이 ssh 세션의 모든 패킷을 모든 호스트를 통해 반송하는 복잡한 터널을 만들고 있다는 것을 알고 있습니까? 단순히 ssh 세션을 중첩시키지 않고 문제를 해결할 수 있습니까?
jw013

@ jw013 아니요, 나는 그것을 몰랐지만 말이됩니다. 솔직히 5-10 레벨은 과장되었지만 "한 번에 퍼티를 깨끗하게 빠져 나가는 방법"에 대한 나의 질문을 설명하려고 노력했습니다.
Banjer

답변:


29

ssh연결 종료 이스케이프 시퀀스를 사용해보십시오 .

에서 ssh세션을 입력 ~.(점 물결표). 입력 할 때 문자가 표시되지 않지만 세션이 즉시 종료됩니다.

$ ~.
$ Connection to me.myhost.com closed.  

에서 man 1 ssh

The supported escapes (assuming the default ‘~’) are:
 ~.      Disconnect.
 ~^Z     Background ssh.
 ~#      List forwarded connections.
 ~&      Background ssh at logout when waiting for forwarded 
         connection / X11 sessions to terminate.
 ~?      Display a list of escape characters.
 ~B      Send a BREAK to the remote system (only useful for SSH protocol
         version 2 and if the peer supports it).
 ~C      Open command line.  Currently this allows the addition of port 
         forwardings using the -L, -R and -D options (see above). It also
         allows the cancellation of existing remote port-forwardings using 
         -KR[bind_address:]port.  !command allows the user to execute a 
         local command if the PermitLocalCommand option is enabled in
         ssh_config(5).  Basic help is available, using the -h option.
 ~R      Request rekeying of the connection (only useful for SSH protocol 
         version 2 and if the peer supports it).

정말 멋진! ~.별명이나 함수 를 넣을 방법이 있습니까? 이름을 쉽게 기억할 수 있도록합니다 exitall. 이제는 너무 많은 것을 요구하고 있습니다 :). 나는 몇 가지를 시도 ~/.bashrc했지만 얻을 -bash: ~.: command not found. bash는 문자열을 키보드에서 직접 이스케이프 시퀀스가 ​​아닌 문자열로 간주한다고 가정합니다.
Banjer

나는 ctrl+d해결책도 좋아 하지만 이것은 내 질문에 더 직접적으로 대답합니다. 모두 감사합니다.
Banjer

3
@ Banjer bash는 보지 못합니다 . 자체 ~.처리됩니다 ssh.
Gilles 'SO- 악마 그만해'

@Gilles gotcha는 말이됩니다.
Banjer

그리고 PuTTY도이를 보장한다는 보장은 없습니다. CLI ssh클라이언트는 CLI 이기 때문에이 기술이 필요합니다. PuTTY는 GUI 응용 프로그램이며 GUI에서이 작업을 수행하는 훨씬 더 사용자 친화적 인 방법이 있습니다.
Alexios

12

그냥 눌러 CtrlD그것은 윈도우 사라질 때까지 보류 Ctrl 키를 눌러 "D"거기에 당신을 기록합니다.


1
슬프게도 이것은 보편적으로 작동하지 않습니다. 편집기 나 다른 전체 화면 도구를 실행하는 모든 세션은 무시 EOT됩니다. 그리고 bash명령 행 중간에 그것을 무시할 것입니다. 직접 해보십시오 : 한 글자를 입력하고 시도하십시오 Ctrl-D.
Alexios 2016 년

Ctrl + D는 무엇을합니까? 안전하게 존재하거나 프로세스를 종료한다는 의미입니까?
AMB

안전하게 종료됩니다. 'exit'을 입력하고 Enter를 누르는 것과 동일한 쉘 단축키입니다.
Joe

실제로 내 (Windows git bash & ubuntu bash) 문제 a logout.
velis December

예, SSH 연결이 로그인 세션이 아닌 경향이 있으므로 exit도 로그 아웃을 호출한다고 생각합니다.
Joe


2

다른 방법은 다음을 만드는 것 function입니다 ssh.

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

불행히도 원격 시스템에서 작업을 마친 후에는 항상 연결을 닫고 콘솔에서 로그 아웃합니다.

모든 서버에서 이러한 기능을 수행해야합니다. 그렇지 않으면이 핵이 작동하지 않습니다. 그러나 항상 ~ / .bashrc 또는 ~ / .whatever_shell_you_use_rc에 함수를 넣을 수 있습니다.

uther의 방식과 비교할 때 약간 더러운 핵이 보입니다.


functionPOSIX가 아닙니다. 키워드 만 삭제하면 $@제대로 인용해야합니다 . 그렇지 않으면 단어 분리 (나쁜) 후에 인수가 전달됩니다.
Chris Down

2

또는 다른 호스트로 이동할 때 exec쉘 프로세스를 대체 하는 데 사용할 수 있습니다 ssh.

SSH to host1 with PuTTY...
banjer@host1:~> #...doin some work...ooh! need to go check something on host8...
banjer@host1:~> exec ssh host8
banjer@host8:~> #...doin some work...OK time for lunch. lets close putty...
banjer@host8:~> exit
Putty closes.

트래픽이 다른 모든 서버를 통과하기 때문에 5 레벨 깊이는 그리 좋지 않습니다. 이 때문에 PuTTY 또는 ssh (~.)를 죽이는 것은 좋지 않습니다.

"게으른"것보다 적게 시도하는 것이 좋습니다. 퍼티 제목 표시 줄을 마우스 오른쪽 버튼으로 클릭하면 새 세션을 빠르게 열 수 있습니다. "기본"서버가 있고이 서버에서 1 번 점프하면 "중복 세션"기능이 매우 유용합니다. 특히 pubkey 인증을 사용하는 경우.


2

약간의 스크립팅을하는 것이 마음에 들지 않으면이 작업을 수행 할 수 있습니다.

스크립트 : myssh.sh

#!/bin/bash
ssh $1
if [ $? -eq 5 ]; then
 exit 5
fi

도트 명령을 통해 호출하십시오.

$ . myssh user@server.com

한 레벨을 종료하려면 다음을 수행하십시오.

$ exit

모두 종료하려면 다음을 수행하십시오.

$ exit 5

물론, 당신은 당신이 ssh 한 모든 컴퓨터에 그것을 복사했을 것입니다. 또한 ssh라는 쉘 함수를 정의하는 것이 더 쉽지 않습니까? 그것은 선행 기간 등을 피할 것입니다.
etherfish

-1

퍼티 터미널 창에 로그 아웃을 입력하면 나에게 도움이됩니다.

richard@forevermore:~ > logout

ssh 연결을 닫고 Putty 응용 프로그램을 종료하십시오.


질문을 제대로 읽지 못했다고 생각합니다. OP는 ssh host1다음에 from host1에서 수행 ssh host8합니다. 이 시점에서 a logoutexit이미 알고 있는 명령 과 동일한 작업을 수행합니다. 종료했다가 host8다시 넣습니다 host1.
G-남자 '는 분석 재개 모니카'말한다

알았어, 내 잘못이야
Richard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.