Sửa cài đặt tập tin cấu hình ssh thành đường hầm đến máy thứ 3


18

Tôi đang cố gắng đào hầm đến một máy chủ thông qua một máy chủ cầu. Cho đến nay, tôi đã có thể làm cho nó hoạt động chính xác từ shell lệnh bằng cách sử dụng lệnh sau:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

Nhưng tôi đã cố gắng bọc nó vào ~/.ssh/configtập tin của mình và tôi gặp rắc rối. Tôi đã thử:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

Nhưng khi tôi làm, tôi nhận được thông báo lỗi sau remoteserver.comvà tôi không chắc điều gì gây ra nó:

ksh: SSH-2.0-OpenSSH_6.8 ^ M: không tìm thấy

Tôi biết rằng khi tôi đăng nhập remoteserver.com, vỏ của tôi là /usr/bin/ksh.

Tôi đã cố gắng thêm các đối số đường dẫn vào các lệnh ssh trong tệp cấu hình, nhưng nó không có sự khác biệt.

Bất kỳ ý tưởng những gì nó có thể được?


Đó không phải ProxyCommandlà làm thế nào được sử dụng. Thông thường nó được sử dụng với netcat nơi ssh là đường ống đầu ra của mình thông qua nó và netcat đang đóng vai trò là đường hầm đến RemoteServer cổng SSH. Bạn cần một ProxyCommand giống như ssh -W %h:%p bridge_userid@bridgemachine.comnếu bạn muốn sử dụng tính năng đó.
DanSut

Thật không may, máy chủ cầu của tôi không cài đặt netcat, vì vậy tôi đang cố gắng để nó hoạt động theo cách khác. Tôi hình dung nếu nó có thể hoạt động từ dòng lệnh, cần có một cách để đưa thông tin vào một tệp cấu hình.
Eric B.

Trong cách sử dụng dòng lệnh của bạn hoạt động ssh -A remote_userid@remoteserver.comnhư một lệnh để chạy trên máy cầu, cấu hình không cung cấp cho bạn cách cung cấp các lệnh mặc định. Những gì bạn cố gắng tự thực hiện worksnhưng sau đó ssh cố gắng sử dụng ProxyCommandnhư một đường hầm và bắt đầu bắn giao thức SSH xuống nơi có vỏ chờ ở đầu kia thay vì sshd lắng nghe giao thức SSH.
DanSut

@dansut làm việc tuyệt vời. Cám ơn!
Eric B.

Câu trả lời:


23

Câu trả lời của Jakuje là đúng, nhưng kể từ OpenSSH 7.3, giờ đây bạn có thể sử dụng -J ProxyJumpdễ dàng hơn. Xem ghi chú của tôi:

OpenSSH 7.3trở lên

Sử dụng ProxyJump. Như được giải thích trong hướng dẫn:

-J [user @] host [: port]
Kết nối với máy chủ đích bằng cách trước tiên tạo kết nối ssh với máy chủ nhảy và sau đó thiết lập chuyển tiếp TCP đến đích cuối cùng từ đó. Nhiều bước nhảy có thể được chỉ định phân tách bằng ký tự dấu phẩy. Đây là một phím tắt để chỉ định một chỉ thị cấu hình ProxyJump.

~/.ssh/configVí dụ về ProxyJump

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

Kết nối với

ssh server2_behind_server1 -v

Thêm -vcho đầu ra dài dòng

-JVí dụ dòng lệnh ProxyJump

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

Kết nối với

ssh server2 -J server1 -v

Hoặc dùng -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4trở lên

Sử dụng ProxyCommandvới-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

Kết nối với

ssh server2 -v

Hoặc dùng -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

OpenSSH dưới đây 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

Kết nối với:

ssh server2 -v

Hoặc dùng -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

Nguồn

-Jđược thêm vào trong OpenSSH 7.3

  • ssh (1): Thêm tùy chọn ProxyJump và cờ dòng lệnh -J tương ứng để cho phép đơn giản hóa thông qua một hoặc nhiều pháo đài SSH hoặc "nhảy máy chủ".

-Wđược thêm vào trong OpenSSH 5.4

  • Đã thêm mode chế độ netcat 'vào ssh (1): "ssh -W host: port ..." Điều này kết nối stdio trên máy khách với một cổng duy nhất chuyển tiếp trên máy chủ. Điều này cho phép, ví dụ, sử dụng ssh làm ProxyCommand để định tuyến các kết nối qua các máy chủ trung gian. bz # 1618

3

Bạn không cần netcattrên cây cầu của bạn. Như DanSut đã đề xuất trong các nhận xét, bạn có thể sử dụng ssh -Wtùy chọn dòng lệnh thay thế, cấu hình này sẽ phù hợp với bạn:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com

Nó đã làm việc. Cảm ơn. Không chắc chắn tại sao, nhưng tôi chắc chắn tôi đã thử nó một lần trong thất bại, nhưng tôi đã thử lại với thành công. Cảm ơn.
Eric B.
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.