Tự động hóa SSH và SCP multi-hop bằng mật khẩu


0

Tôi muốn truy cập một số máy chủ từ máy tính cá nhân của mình, nhưng trước tiên tôi phải truy cập máy chủ trung gian, vì đích đến cuối cùng không thể nhìn thấy từ internet công cộng.

Có điều là tôi phải làm như sau để truy cập máy chủ cuối cùng. Từ máy tính của tôi:

ssh username@server

Và nhập mật khẩu. Khi tôi ở đó:

ssh username2@finalhost

Và nhập mật khẩu khác.

Điều này khá cồng kềnh, đặc biệt khi thực hiện scp, vì tôi phải sao chép tệp vào máy chủ trung gian trước khi có thể sao chép nó vào máy chủ cuối cùng.

Có cách nào để làm cho quá trình này tự động, cả cho sshscplệnh?

Câu trả lời:


4

Nếu bạn có OpenSSH 7.3 trở lên, bạn có thể sử dụng ProxyJump trong cấu hình máy khách SSH của mình để chỉ định máy chủ nhảy.

Ví dụ: chỉnh sửa ~/.ssh/configvà thêm

Host finalhost
HostName finalhost.example.com
User username2
ProxyJump username@server

Bây giờ ssh finalhosthoặc scp file.txt finalhost:.nên đi qua máy chủ nhảy.


Xin lỗi vì sự thiếu hiểu biết của tôi, tôi khá mới với điều này. Nhưng mật khẩu được nêu ở đâu? Họ không nên tham gia để tự động hóa truy cập?
Tendero

3
@Tendero ProxyJump không lưu trữ mật khẩu, nó tự động hóa quá trình kết nối thông qua máy chủ trung gian ("nhảy"). Những gì bạn đang chạy một cái gì đó như ssh finalhosthoặc scp localsource finalhost:destination, và nó tự động kết nối thông qua máy chủ nhảy đến máy chủ cuối cùng. Nhưng nó vẫn sẽ nhắc bạn cho cả hai mật khẩu. Nếu bạn muốn tránh các lời nhắc mật khẩu, tùy chọn tốt nhất của bạn là sử dụng xác thực khóa chung thay vì lưu trữ mật khẩu.
Gordon Davisson

@Tendero Nếu bạn thực sự phải sử dụng mật khẩu, bạn có thể thêm một cái gì đó như sshpass vào hỗn hợp, mặc dù tôi không biết nếu nó hoạt động với hai mật khẩu. Nhưng như Gordon Davisson đã nói, nói chung, tốt nhất là sử dụng pubkey auth.
jjlin

@GordonDavisson Tôi không có cơ hội định cấu hình bất kỳ PC nào tôi kết nối khi thực hiện ssh, chúng vừa là máy chủ vừa là máy chủ lưu trữ trong trường Đại học của tôi và tất cả những gì tôi có là mật khẩu để truy cập chúng. Cho rằng đây là trường hợp, vẫn có thể sử dụng xác thực khóa publick mà bạn đề cập? (Tôi không biết đó là gì, tôi sẽ đọc trong vài giờ để xem nội dung đó là gì.)
Tendero

1
@Tendero Auth khóa công khai không yêu cầu cài đặt khóa chung trên máy chủ (và khớp khóa riêng trên máy khách của bạn). Bạn có thể làm điều này ít nhất trên máy chủ trung gian và lưu một mục nhập mật khẩu không? Ý tưởng về máy chủ lưu trữ mật khẩu không an toàn (ví dụ như trong một kịch bản) làm cho răng bị tổn thương tôi, vì vậy hãy nhìn vào các sshpass tùy chọn jjlin đề cập.
Gordon Davisson

0

Dưới đây là một khối ngắn ~ / .ssh / config sẽ thực hiện tric (ngay cả đối với các phiên bản ssh cũ):

Host server
    User username

Host finalhost
    User username2
    ProxyCommand ssh server -W %h:%p

Bạn khai báo 2 máy chủ, máy chủ giữa và máy chủ cuối cùng. Kết nối ssh đến máy chủ đơn giản với Người dùngMáy chủ được cung cấp trong cấu hình. Kết nối đến Finalhost thực hiện một bước nhảy trên máy chủ như được chỉ định trong dòng ProxyCommand .

Hai tham số ma thuật % h% p được sử dụng để chuyển tiếp Host hiện tại = Finalhost và port hiện tại = 22 (mặc định)

Thứ hai, để ngăn bạn nhập mật khẩu mỗi lần bạn kết nối với các máy đó, bạn có thể sử dụng lệnh ssh-copy-id :

ssh-copy-id server
<type server password for the last time>

ssh-copy-id finalhost
<type finalhost password for the last time>

Để làm việc này, bạn cần tạo một cặp khóa công khai trước đó bằng ssh-keygen . Bạn có thể kiểm tra thời tiết hay không chúng đã tồn tại trong thư mục ~ / .ssh (id_rsa.pub & id_rsa)

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.