Portál AbcLinuxu, 12. května 2025 13:38
ssh -t stroj1.cz ssh -t stroj2.cz ssh -t stroj3.cz ssh -t stroj4.cz2. možnost (to jsem přes víc než jeden stroj nezkoušel):
.ssh/config host host2.cz ProxyCommand ssh -q -a -x host1.cz netcat -c %h %p
-t
je
−t Force pseudo‐tty allocation. This can be used to execute arbitrary screen‐based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple −t options force tty allocation, even if ssh has no local tty.
expect
. v něm si napiš jednoduchý skript, který tě přes ty stroje přihlásí
nc server 22Druha situace: v cestě mezi mujstroj a server stoji jeste nejaka brana. Proxy command opet musi zabezpecit, aby stdin/stdout komunikoval s ssh demonem na stroji server.
ssh brana "nc server 22"Takhle muzete proxy command prodlouzit aby skocil treba pres 10 ruznych bran. S uspechem se vyuzije forwardovani klicu. Ja to pouzivam zhruba takto. U kazdeho Hosta nadefinovaneho v ~/.ssh/config mam uvedeny proxy command.
Host server1 HostName server1.nekde ProxyCommand ~/.ssh/ssh-proxy-command brana1 %h %p Host server2 HostName server2.jinde ProxyCommand ~/.ssh/ssh-proxy-command brana2 %h %p Host server3 HostName server2.tady ProxyCommand ~/.ssh/ssh-proxy-command direct %h %pProxy command vypada (velmi zjednodusene) takto:
#!/bin/bash way=$1 target_addr=$2 target_port=$3 case $way in 'direct') nc $target_addr $target_port ;; 'brana1') ssh brana1 "nc $target_addr $target_port" ;; 'brana2') ssh brana2 "nc $target_addr $target_port" ;;vysledkem toho je, ze ssh ktere spoustite, tedy napriklad
ssh server1
, spusti proxy commnad ktery mu vytvori tunel az na cilovy stroj. takze muzete dle libosti forwardovat porty bez ruznych opicek a pouzivat scp.
Jedinym omezenim tedy je (krome toho ze samozrejme musite mit na vsechny stroje v ceste pristup) aby na poslednim stroji v ceste byl netcat (coz obvykle byva... a kdyz neni tak neni problem si ho zkompilovat do home nebo necim nahradit)
Upozornuji predem na to, ze v proxycommand nesmite cokoly vypsat na standardni vystup - tim vlastne zasahujete do sifrovane komunikace mezi vami a cilovym strojem. Pro ladici vypisy lze s upsechem pouzit stderr.
Host server1 HostName server1.nekde ProxyCommand ssh brana1 nc %h %p Host server2 HostName server2.jinde ProxyCommand ssh brana2 nc %h %p Host server3 HostName server2.tady ProxyCommand nc %h %pJaké je pro něj praktické využití?
-c
, jinak by spojení zůstalo i po ukončení ssh komunikace viset.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.