Portál AbcLinuxu, 10. července 2026 18:51
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 %p
Proxy 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 %p
Jaké je pro něj praktické využití?
-c, jinak by spojení zůstalo i po ukončení ssh komunikace viset.
Potřebuji něco, co bude fungovat nejen v "obvyklé linuxové distribuci". Přesto díky za tip.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.