PHƯƠNG PHÁP 1 (sử dụng phím ssh trên liên)
Nếu bạn muốn giữ lại luồng xác thực
local -- authenticate --> inter -- authenticate (ask password) --> final
Điều này không thể được thực hiện với .ssh / config proxyhost.
Những gì bạn cần là bí danh bash shell (Tôi hy vọng bạn đang sử dụng bash).
Trong ~/.bashrc
, thêm dòng sau
alias ssh-final='ssh -t inter ssh user2@final.com'
Trong dấu nhắc lệnh, chỉ cần gõ sau
ssh-final
final
phần trong ~/.ssh/config
không được sử dụng.
Chi tiết kết nối (1)
ssh -t inter ssh user2@final.com
có thể được xem như sau
local# ssh inter
inter# ssh user2@final.com
local
chỉ "nói" với inter
. Không có kết nối ssh trực tiếp hoặc gián tiếp giữa local
và final
. local
chỉ hiển thị đầu ra của ssh user2@final.com
.
PHƯƠNG PHÁP 2 (sử dụng phím ssh trên cục bộ)
Xác thực với cùng ssh-key
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Sao chép cục bộ ~/.ssh/id_ras.pub
vào
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
Chi tiết kết nối (2)
đường hầm ssh
Trước khi chúng ta đi vào chi tiết ProxyCommand
, hãy xem ví dụ sau
Bước 1, trên cửa sổ terminal 1
local# ssh inter -L 2000:final.com:22
Bước 2, trên cửa sổ terminal 2
local# ssh localhost -p 2000
Trong thiết bị đầu cuối 1, một đường hầm được thiết lập giữa cổng cục bộ 2000 và cổng Final.com 22. Mọi thứ được gửi đến cổng cục bộ 2000 sẽ được chuyển tiếp đến cổng cuối cùng.com 22 và ngược lại.
Trong thiết bị đầu cuối 2, ssh kết nối với cổng cục bộ 2000, nhưng thực sự đang giao tiếp với cổng 22 cuối cùng, đó là sshd.
Với đường hầm, ứng dụng khách ssh cục bộ trong Bước 2 được kết nối trực tiếp với sshd Final.com.
"Đầu ra" của cổng cục bộ 2000, là "lưu lượng" ssh daemon.
Sử dụng phổ biến của đường hầm như vậy là để truy cập máy chủ web nội bộ hoặc máy chủ email. Dưới đây là ví dụ cho máy chủ web
local# ssh inter -L 2000:final.com:80
Trong trình duyệt sử dụng URL sau
http://localhost:2000
Hai điểm cuối của đường hầm là cổng cục bộ 2000 và cổng cuối cùng.com 80.
Giao thông đến và đi từ điểm cuối đường hầm "NHƯ VẬY". Hãy gọi đó là lưu lượng truy cập "thô".
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Việc ProxyCommand
tiến thêm một bước. Nó bỏ qua bước tạo một cổng cục bộ và kết nối với nó.
Một máy khách ssh sẽ thực thi lệnh từng được đưa ra phía sau ProxyCommand
và coi đầu ra của lệnh đó là lưu lượng "thô". Nó đang giữ điểm cuối cục bộ, và sau đó bắt đầu kết nối ssh với nó.
Tại sao người này không làm việc kia?
Lệnh sau
ssh inter nc final.com 22
về cơ bản có nghĩa là (1) kết nối với inter
, sau đó (2) bật inter
, chạy lệnh nc final.com 22
.
nc - arbitrary TCP and UDP connections and listens
Vì vậy, nc final.com 22
sẽ kết nối với cổng 22 cuối cùng, in ra tất cả lưu lượng truy cập đến thiết bị xuất chuẩn và gửi tất cả stdin sang phía bên kia. Đó là một "đường hầm" giữa nc stdin / out và Final.com port 22.
Vì nc
được chạy trong phiên ssh, tất cả các thiết bị xuất chuẩn của nó được chuyển trở lại máy khách ssh, dưới dạng lưu lượng "thô". Và ứng dụng khách ssh có thể chuyển lưu lượng truy cập vào nc stdin, kết thúc tại cổng 22.com.
Thông qua "đường hầm" ở trên, máy khách ssh cục bộ sẽ bắt đầu một phiên ssh final.com
trực tiếp.
Lệnh sau
ssh -t inter ssh user2@final.com
không hoạt động với ProxyCommand
vì nó không phải là lưu lượng truy cập "thô" từ trình nền ssh. Đây là thiết bị xuất chuẩn của máy khách ssh . Nói chuyện với khách hàng có nghĩa là không có kinh doanh.
Xác thực với khóa ssh khác nhau (OP gốc cấu hình)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
Sao chép cục bộ ~/.ssh/id_ras.pub
vào
/home/user1/.ssh/authorized_keys in `inter`
Sao chép cục bộ ~/.ssh/id_ras_2.pub
vào
/home/user2/.ssh/authorized_keys in `final`
Cả hai điều trên sẽ cho phép sử dụng sau
local# ssh final
Kiểm tra bổ sung
Sử dụng dài dòng
local# ssh -v final
Điều đó sẽ giúp xác định vấn đề ssh.
Kiểm tra nc
ProxcyCommand
đang thực hiện nc
trên inter
. Kiểm tra nếu nc
thực sự có sẵn trên inter
.
local# ssh inter
inter# nc final.com 22
Kiểm tra khóa rsa được thiết lập đúng
Nếu các khóa khác nhau được sử dụng cho inter
và final
, các tệp sau sẽ tồn tại trong máy cục bộ
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
Vì bạn có thể ssh đến inter
rồi, hãy kiểm tra thiết lập khóa trên final
. Từ máy cục bộ của bạn
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
Bạn nên xem nội dung id_rsa_2.pub
ở đó.
ssh -t
, nhưng những gì tôi muốn làm là mô phỏng chính xác hành vi tôi có khissh -t
chỉ sử dụng cấu hình trên.ssh/config
.