thoát khỏi tất cả các kết nối SSH trong một lệnh và đóng PuTTY


18

Có cách nào để sao lưu tất cả các kết nối SSH và đóng PuTTY trong "một lần bắn" không? Tôi làm việc trong Windows 7 và sử dụng PuTTY để SSH cho nhiều máy chủ Linux khác nhau.

Một ví dụ về cách tôi thấy mình làm việc:

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.

Ở trên, có cách nào để chuyển từ host8 sang đóng PuTTY trong một lần bắn không? Đôi khi tôi thấy mình có tới 5 hoặc 10 máy chủ sâu. Tôi nhận ra rằng tôi có thể nhấp vào X để đóng cửa sổ PuTTY, nhưng tôi muốn đảm bảo các kết nối SSH của mình được đóng đúng cách bằng cách sử dụng lệnh exit. Tôi cũng nhận ra rằng tôi đang xin lời khuyên về cách tăng sự lười biếng. Tôi sẽ chỉ viết nó ra là "làm thế nào tôi có thể hiệu quả hơn".


6
Không trực tiếp những gì bạn đang hỏi nhưng làm thế nào về chỉ nhấn ctrl+dnhiều lần?
Ulrich Dangel

@UlrichDangel Tôi chưa bao giờ sử dụng nó trước đây, nhưng cũng là một cách nhanh chóng để rút lui khỏi các kết nối một cách nhanh chóng.
Banjer

2
Bạn có thực sự làm tổ ssh phiên 5 đến 10 cấp độ sâu? Bạn có nhận ra rằng việc tạo một đường hầm phức tạp sẽ trả lại tất cả các gói trong phiên ssh của bạn thông qua tất cả các máy chủ đó không? Bạn có thể làm cho vấn đề biến mất bằng cách đơn giản là không lồng các phiên ssh?
jw013

@ jw013 Không, tôi không nhận ra điều đó, nhưng có ý nghĩa. Thành thật mà nói, 5-10 cấp độ là một sự cường điệu, nhưng tôi đã cố gắng minh họa câu hỏi của mình về "làm thế nào để thoát khỏi Putty trong một cú trượt ngã".
Banjer

Câu trả lời:


29

Hãy thử sử dụng sshtrình tự thoát kết thúc kết nối.

Trong sshphiên, nhập ~.(dấu chấm). Bạn sẽ không thấy các ký tự khi bạn nhập chúng, nhưng phiên sẽ chấm dứt ngay lập tức.

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

Từ 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).

Tuyệt đấy! Bất kỳ cách nào để đưa ~.vào một bí danh hoặc chức năng? Chỉ cần cho nó một cái tên dễ nhớ như thế exitall. Bây giờ tôi đang yêu cầu quá nhiều :). Tôi đã thử một vài thứ trong ~/.bashrcnhưng có được -bash: ~.: command not found. Tôi cho rằng bash xem nó như một chuỗi chứ không phải là một chuỗi thoát trực tiếp từ bàn phím.
Banjer

Tôi cũng thích ctrl+dgiải pháp này, nhưng điều này trả lời câu hỏi của tôi trực tiếp hơn. Cảm ơn tất cả.
Banjer

3
@Banjer bash không bao giờ nhìn thấy ~., nó tự xử lý ssh.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles gotcha, có ý nghĩa.
Banjer

Và không có gì đảm bảo rằng PuTTY cũng làm điều này. Máy sshkhách CLI cần kỹ thuật này vì đó là CLI. PuTTY là một ứng dụng GUI và có nhiều cách thân thiện hơn với người dùng để thực hiện công cụ này trên GUI.
Alexios

11

Chỉ cần nhấn CtrlDvà nó sẽ đăng bạn ra khỏi đó để giữ ctrl và nhấn "d" cho đến khi cửa sổ biến mất.


1
Đáng buồn thay, điều này không hoạt động phổ biến. Bất kỳ phiên nào chạy trình chỉnh sửa hoặc công cụ toàn màn hình khác đều có khả năng bỏ qua EOT. Và thậm chí bashsẽ bỏ qua nó ở giữa một dòng lệnh. Hãy tự mình thử: gõ một chữ cái và thử Ctrl-D.
Alexios

Ctrl + D làm gì, ý tôi là nó tồn tại an toàn hay chỉ giết chết quá trình?
AMB

Nó thoát ra một cách an toàn. Đó là một phím tắt shell giống như gõ 'exit' và nhấn enter.
Joe

Trên thực tế của tôi (windows git bash & ub Ubuntu bash) phát hành a logout.
velis

có, tôi tin rằng thoát cũng gọi đăng xuất vì các kết nối ssh có xu hướng không phải là phiên đăng nhập.
Joe


2

Một cách khác là làm functioncho ssh:

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

Thật không may, nó cũng sẽ luôn đóng kết nối và đăng xuất khỏi bảng điều khiển sau khi bạn hoàn thành công việc trên hệ thống từ xa.

Lưu ý rằng bạn cần thực hiện chức năng như vậy tại tất cả các máy chủ của mình, nếu không thì hack này sẽ không hoạt động. Btw bạn luôn có thể đặt hàm vào ~ / .bashrc hoặc ~ / .whthing_shell_you_use_rc.

Có vẻ như một chút hack bẩn so với cách của uther.


functionkhông phải là POSIX - chỉ cần xóa từ khóa và bạn cần trích dẫn $@chính xác, nếu không các đối số của bạn sẽ được thông qua sau khi tách từ (xấu).
Chris Down

2

Hoặc bạn có thể sử dụng execđể thay thế quy trình shell của mình sshkhi nhảy sang máy chủ khác:

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 cấp độ sâu không đẹp, vì lưu lượng sẽ đi qua tất cả các máy chủ khác. Do đó, tôi không khuyên bạn chỉ nên giết PuTTY hoặc ssh (~.), Vì (tùy thuộc vào những gì bạn làm) điều này có thể dẫn đến các quá trình mồ côi trên các máy chủ.

Tốt hơn để thử và bớt "lười biếng". Nhấp chuột phải vào thanh tiêu đề puttys giúp mở một phiên mới nhanh chóng. Nếu bạn có máy chủ "mặc định" và chấp nhận 1 bước nhảy từ đó, tính năng "Phiên trùng lặp" rất hữu ích. Đặc biệt là khi sử dụng xác thực pubkey.


2

Nếu bạn không ngại làm một chút kịch bản, bạn có thể làm điều này.

Kịch bản: myssh.sh

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

Gọi qua lệnh dot:

$ . myssh user@server.com

Nếu bạn muốn thoát một cấp:

$ exit

Nếu bạn muốn thoát tất cả:

$ exit 5

Tất nhiên, bạn sẽ sao chép nó vào mọi máy tính mà bạn có thể ssh từ đó. Ngoài ra, sẽ dễ dàng hơn nếu chỉ định nghĩa một hàm shell gọi là ssh? Điều đó sẽ tránh được giai đoạn tiền xử lý, v.v.
etherfish

-1

Nhập logout trong cửa sổ terminal putty cho tôi:

richard@forevermore:~ > logout

Đóng kết nối ssh và thoát khỏi Ứng dụng Putty.


Tôi tin rằng bạn đã không đọc chính xác câu hỏi. OP làm ssh host1, và sau đó, từ host1, không ssh host8. Tại thời điểm đó, a logoutsẽ làm điều tương tự như exitlệnh mà họ đã biết - thoát ra host8và đưa chúng trở lại host1.
G-Man nói 'Tái lập Monica'

Ok, tôi thấy, xấu của tôi.
Richard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.