ssh qua nhiều máy chủ


37

Để đến máy của tôi trong văn phòng của tôi, tại thời điểm tôi đang làm điều này:

me@home:~$ ssh unix.university.com
me@unix:~$ ssh unix.department.univeristy.com
me@unix.department:~$ ssh office-machine.department.university.com
me@office-machine:~$ echo "This is very annoying"

Có một cách dễ dàng để tự động hóa quá trình này, có lẽ là một lệnh duy nhất mà tôi có thể sử dụng ở cuối?


Câu trả lời:


31

Bạn có thể sử dụng ứng dụng khách ssh để thực thi ssh trên máy từ xa khi đăng nhập.

ssh -t unix.university.com \
    ssh -t unix.department.univeristy.com \
    ssh -t office-machine.department.university.com

(Lý do tôi đưa -tvào các yêu cầu là vì ssh đã báo lỗi cho tôi: stdin không phải là thiết bị đầu cuối khi tôi thử nó trên máy của mình; máy của bạn có thể khác.)

Khi bạn thoát khỏi shell cuối cùng, quá trình sẽ thoát chuỗi, giúp bạn tiết kiệm Ctrl-Dnhiều lần.


Xin lưu ý: chỉ thêm "-t" nếu bạn chỉ cần đăng nhập trên máy từ xa. Để bắt đầu một lệnh trên máy từ xa, KHÔNG đặt chúng vì chúng có thể / sẽ làm hỏng một số thứ (ví dụ tar cf - something | ssh somewhere "cd /path/remote ; tar xf - " :: có thể bị hỏng nếu bạn thêm -t! Xem ví dụ về câu trả lời tuyệt vời của StephaneChazelas unix.stackexchange.com/questions/151916/ Tiết )
Olivier Dulac

3
Sử dụng -J an toàn hơn câu trả lời này, vì sau đó bạn có khả năng lưu trữ tất cả các khóa ssh trên máy tính cục bộ của mình. Tùy chọn -J được giới thiệu trong phiên bản openssh 7.3 như được đề cập trong câu trả lời từ @Miikka
Erik Sjölund

1
@ ErikSjölund Openssh không cho phép nhiều hơn một -Jtùy chọn. Tôi nghĩ bạn có thể làm điều đó với nhiều ProxyCommandtùy chọn trong cấu hình của bạn.
amphetamachine

1
@amphetamachine Với -Jbạn có thể chỉ định một danh sách các bước nhảy được phân tách bằng dấu phẩy để đi qua. Nhưng sử dụng ProxyCommandvới -Wvẫn là một cách tiếp cận tốt hơn nhiều so với câu trả lời này nếu bạn tình cờ sử dụng một phiên bản quá cũ để hỗ trợ -J.
kasperd

35

Vâng, có một cách tuyệt vời để làm điều đó bằng cách sử dụng ssh ProxyCommand và netcat

Đặt một cái gì đó như thế này trong .ssh / config của bạn

Host *.department.university.com
User me
ForwardAgent yes
ProxyCommand ssh unix.university.com nc %h %p

Điều này sẽ đăng nhập trực tiếp vào bất kỳ máy chủ .depidor.university.com nào bằng cách sử dụng máy chủ jump / bastion unix.university.com. Bạn cũng có thể cần một khổ thơ cho unix.university.com trực tiếp.

Đây là một liên kết giải thích cách thức hoạt động của nó: http://backdrift.org/transparent-proxy-with-ssh

Với kỹ thuật này, bây giờ bạn có thể chỉ cần viết

ssh unix.department.university.com

và tất cả sẽ xuất hiện trực tiếp. Các công cụ như rsync, scp, v.v (mọi thứ trong ssh stack) cũng sẽ hoạt động trong suốt.


2
+1 Tôi sử dụng một cái gì đó tương tự như thế này để đẩy dữ liệu từ mạng thử nghiệm sang mạng prod thông qua máy chủ dàn.
Arcege

2
Yup, điều này làm việc tuyệt vời!
gabe.

15
Chỉ để ghi lại các phiên bản mới hơn của ssh hỗ trợ -Wtùy chọn, bạn có thể làm một cái gì đó như ProxyCommand ssh -W %h:%p gatewaythay vì phụ thuộc vào nc
Ulrich Dangel

Tốt để biết! Thx
Aaron Brown

2
hoạt động tuyệt vời nếu tên của người dùng giống nhau trên các máy; nếu nó khác bạn phải làm một cái gì đó nhưProxyCommand ssh -W %h:%p user@gateway
Riccardo Cossu

9

Trong OpenSSH 7.3, ssh đã thêm -Jcờ dòng lệnh và ProxyJumptùy chọn cấu hình tương ứng để giải quyết chính xác vấn đề này.

Cung cấp cho các máy chủ bạn muốn ssh thông qua như một danh sách được phân tách bằng dấu phẩy -J. Ví dụ:

ssh -J unix.university.com,unix.department.university.com  \
  office-machine.department.university.com

-5

SSH đường hầm. Tôi không nhớ chính xác làm thế nào để làm điều này tuy nhiên tôi biết có một cách cơ bản để có một máy cho phép một đường hầm bằng cách có thể kết nối với một cổng riêng. Bằng cách đó, bạn chỉ cần shell vào cùng một máy ban đầu (ví dụ với một cổng khác) và nó sẽ đưa bạn vào vị trí cuối cùng của bạn.

Sẽ phải tìm cách cấu hình nó mặc dù.

:)


Bạn không muốn (và có lẽ bạn không thể) mở một cổng hoặc cổng ssh đại học của bạn
Stéphane Gimenez

9
Nếu bạn không biết cách thực hiện và không thể bận tâm tìm kiếm nó, tại sao bạn lại đăng câu trả lời này?
amphetamachine

4
Không thực sự là một câu trả lời
gabe.
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.