Thiết bị đầu cuối giả sẽ không được phân bổ vì stdin không phải là thiết bị đầu cuối


14

Tôi đang cố gắng thiết lập SSH nhảy tự động thông qua một máy chủ không có nc.

Điều này hoạt động từ dòng lệnh:

ssh -A gateway ssh steve@target

(Tôi đã thêm khóa công khai của mình vào tác nhân SSH).

Tuy nhiên, việc thêm nó vào ~ / .ssh / config không:

Host target
  User steveb
  ProxyCommand ssh -A gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

Cố gắng buộc vấn đề với -tlà thú vị nhưng không có ích.

ProxyCommand ssh -A -t gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

Thêm nữa -tkhông? Không tốt.

ProxyCommand ssh -A -t -t gateway ssh steve@targetip

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

Điều này có thể không? Hầu hết các hướng dẫn (ví dụ: http://www.arrfab.net/blog/?p=246 ) đề xuất sử dụng nc.


Là kết luận rằng netcat là cần thiết?
MountainX-for-Monica

Hình như nó Trong trường hợp này, tôi đã có thể cài đặt nó, giải quyết vấn đề của mình - nhưng tôi không phải lúc nào cũng có sự xa xỉ đó.
Steve Bennett

Xem câu trả lời của tôi dưới đây cho hai cách tôi có thể làm điều này mà không cần netcat.
MountainX-for-Monica

Câu trả lời:


13

SSH ProxyCommand không có netcat

ProxyCommand rất hữu ích khi các máy chủ chỉ có thể truy cập gián tiếp. Với netcat, nó là eo biển tương đối phía trước:

ProxyCommand ssh {gw} netcat -w 1 {host} 22

Ở đây {gw} và {host} là các trình giữ chỗ cho cổng và máy chủ.

Nhưng cũng có thể khi netcat không được cài đặt trên gateway:

ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'

/ Dev / tcp là một tính năng tích hợp của bash tiêu chuẩn. Các tập tin không tồn tại. Để kiểm tra xem bash có tính năng này được tích hợp sẵn hay không:

cat < /dev/tcp/google.com/80 

... Trên cổng.

Để đảm bảo rằng bash được sử dụng, sử dụng:

ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"

Và nó thậm chí hoạt động cùng với ControlMaster.

(Được cập nhật vào ngày 22 tháng 10 để bao gồm tiêu diệt để dọn sạch mèo nền) (Cập nhật vào ngày 3 tháng 3 năm 2011 để làm cho trình giữ chỗ rõ ràng hơn và giải thích / dev / tcp)

Tín dụng 100% cho roland schulz. Đây là nguồn:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
xem thêm thông tin hữu ích trong các nhận xét ở đó.

Ngoài ra còn có nhiều hơn ở đây:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-USE-bash http :
//securityreliks.secureg Rum.com/2010/08/eneac-devtcp-on-backtrack -4r1ubfox /

CẬP NHẬT : đây là một cái gì đó mới từ Marco

Để tham chiếu đến ProxyCommand trong ~ / .ssh / config nơi người ta có một dòng như thế này:

ProxyCommand ssh gateway nc localhost %p

Marco nói:

Bạn không cần netcat nếu bạn sử dụng phiên bản OpenSSH gần đây. Bạn có thể thay thế nc localhost% p bằng -W localhost:% p.

Kết quả sẽ như thế này:

ProxyCommand ssh gateway -W localhost:%p

8

T lớn, không ít t.

-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation. 

Kịch bản của tôi được sử dụng để trả về tin nhắn đó, và không còn nữa.

/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system

Tôi sử dụng hệ authorized_keythống other_system để chạy lệnh này:

from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ... 

3

Hãy thử xem:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip

Đợi đã, nó khác với những gì tôi đã thử như thế nào?
Steve Bennett

@SteveBennett Sự khác biệt là điều này không chỉ cố gắng phân bổ TTY trên hệ thống thứ hai mà còn trên hệ thống thứ nhất.
Hauke ​​Laging

Đó chính xác là cùng một lệnh tôi đã đề cập với kết quả "gây cười nhưng không có ích"?
Steve Bennett

@SteveBennett Tôi đã đọc sai điều đó, thực sự. Mục đích của tôi là có -tcả hai kết nối và tôi thấy nó sai. Tôi đã chỉnh sửa câu trả lời của tôi.
Hauke ​​Laging

Ah. Chà, vẫn không tốt. Đã thử tất cả các kết hợp.
Steve Bennett

-3

Bạn có thể thử kỹ thuật sau đây của ssh'ing vào server1, sau đó là ssh'ing vào server2.

$ ssh -t user1@server1 ssh -t user2@server2 

Làm điều đó như thế này làm việc cho tôi.


1
Vui lòng giải thích thêm ... Lệnh này làm gì và làm thế nào hữu ích để giải quyết câu trả lời.
Tejas
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.