it-swarm-eu.dev

Jak mohu SSH strojem A přes B v jednom příkazu?

Chci získat přístup k počítači, řekni stroj A, který je umístěn v síti mé univerzity. Tento počítač je však přístupný pouze prostřednictvím interní sítě univerzity, takže nemůžu použít SSH k tomuto počítači přímo z domova.

Tady je to, co teď dělám:

  1. Přihlaste se k jinému univerzitnímu stroji, řekněte stroj B

    (Tento stroj B je přístupný přes SSH z mého domácího počítače.)

  2. Použijte SSH na B pro připojení k A.

Existuje způsob, jak to udělat rychleji? Použití pouze jednoho příkazu ssh.

116
nikosdi

Ano, pomocí ProxyCommand ve vaší konfiguraci SSH.

Vytvořte konfigurační soubor SSH ve vašem domovském adresáři (pokud si nepřejete, aby byl tento systém široký), ~/.ssh/config:

Host unibroker          # Machine B definition (the broker)
Hostname 12.34.45.56    # Change this IP address to the address of the broker
User myusername         # Change this default user accordingly 
                        # (`[email protected]` can overwrite it)

Host internalmachine    # Machine A definition (the target Host)
ProxyCommand ssh -q unibroker nc -q0 hostname.or.IP.address.internal.machine 22

Nyní můžete dosáhnout stroje A přímo pomocí

ssh [email protected]

Také si všimněte, že nyní pro něj máte jediný cílový název hostitele SSH, můžete jej použít také v jiných aplikacích. Např.:

Poznámky

Změňte hostname.or.IP.address.internal.machine A port (22) Na stroj, ke kterému se chcete dostat, jako byste z počítače unibroker.

V závislosti na verzi netcat na unibroker Host musí být volba -q0 Vynechána. Pokud jde o autentizaci; v podstatě nastavujete dvě připojení SSH z vaší pracovní stanice. To znamená, že unibroker Host i interní stroj Host jsou ověřovány/ověřovány proti sobě (jak pro klíč/heslo, tak pro ověření klíče hostitele).

Vysvětlení

Tento přístup k použití ProxyCommand a 'netcat' je jen jedním ze způsobů, jak toho dosáhnout. Líbí se mi to, protože můj klient SSH hovoří přímo k cílovému počítači, abych mohl ověřit hostitelský klíč od svého klienta a mohu použít své ověření veřejným klíčem bez použití jiného klíče u makléře.

Každá Host definuje začátek nové sekce Host. Hostname je cílový název hostitele nebo adresa IP daného hostitele. User je to, co byste poskytli jako uživatelskou část v ssh [email protected].

ProxyCommand bude použit jako potrubí k cílovému počítači. Použitím SSH k prvnímu stroji a přímým nastavením jednoduchého 'netcat' (nc) odtud je to v podstatě jen prostý text, který se předává internímu stroji od zprostředkovatele mezi těmi. Možnosti -q Umlčují jakýkoli výstup (pouze osobní preference).

Ujistěte se, že máte na zprostředkovateli nainstalovanou netcat (obvykle ve výchozím nastavení dostupná na Ubuntu) - buď netcat-openbsd Install netcat-openbsd nebo netcat-tradiční Install netcat-traditional .

Všimněte si, že zde stále používáte SSH se šifrováním dvakrát. Zatímco kanál netcat je prostý text, váš klient SSH ve vašem počítači nastaví další šifrovaný kanál s konečným cílovým počítačem.

102
gertvdijk

Hop v jednom kroku

Zřejmou alternativou k přístupu ProxyCommand, který jsem uvedl v moje druhá odpověď , by bylo „skákání“ přímo do cílového počítače:

ssh -t [email protected] ssh [email protected]

Všimněte si -t Při prvním příkazu ssh. Bez ní to selže:

Pseudo-terminal will not be allocated because stdin is not a terminal.
ssh_askpass: exec(/usr/bin/ssh-askpass): No such file or directory
Permission denied, please try again.
[...]

Vynutí to, aby byl přidělen skutečný TTY

Nevýhodou je, že nyní probíhá veškerá konfigurace, ověřování a ověřování na počítači B, což se z mé bezpečnostní situace opravdu nelíbí. Mám rád svůj klíč na svém vlastním počítači a ověřuji a ověřuji konečný cílový počítač z vlastního počítače. Kromě toho můžete použít pouze interaktivní prostředí Shell pro SSH, takže se nebude zabývat jinými nástroji, jako je SCP nebo používáním správce souborů GUI.

Ze všech výše uvedených důvodů důrazně doporučuji přístup ProxyCommand , ale pro rychlé připojení to funguje dobře.

55
gertvdijk

Můžete použít -J možnost příkazového řádku:

ssh -J [email protected] [email protected]

Z man ssh :

-J [[email protected]]Host[:port]
     Connect to the target Host by first making a ssh connection to
     the jump Host and then establishing a TCP forwarding to the
     ultimate destination from there.  Multiple jump Hops may be
     specified separated by comma characters.  This is a shortcut to
     specify a ProxyJump configuration directive.

Byl představen v OpenSSH verzi 7.3 (vydáno v srpnu 2016). Je k dispozici v Ubuntu 16.10 a novějších.

46
Erik Sjölund

Zkuste použít

Host <visible hostname alias>
        Controlmaster auto
        User <user>
        hostname <visible hostname>
        port <port>
        IdentityFile ~/.ssh/<id file>

Host <private LAN hostname alias>
     ProxyCommand ssh -q -W <private LAN hostname>:<private LAN port> <visible hostname alias>

ve vašem ~/.ssh/config a to vše v jednom záběru s klávesami pouze v počítači.

18
SSH Help

Toto je velmi užitečný návrh. Poté, co jsem si celé hodiny pohrával, našel jsem tuto poznámku a potvrdil jsem, že to funguje přesně podle dokumentace. Pro připojení přes MachineA k MachineB ze vzdáleného machineC:

např .: [xuser @ machineC ~] ssh -t MachineA ssh MachineB

"-T" je kritický, ssh selže, pokud není přítomen. Dostanete výzvu dvakrát, nejprve pro heslo na MachineA, pak podruhé pro MachineB. Také si uvědomte, že to předpokládá, že na všech třech počítačích je definován uživatel „xuser“. Pokud ne, použijte syntaxi ssh: "yuser @ MachineA ...". Všimněte si také, že můžete použít tečkované quad raw IP # s, pokud chcete. To je užitečné, pokud propojujete soukromou místní síť, která používá IP, které nejsou vystaveny světu - tj. ne v místním hostitelském souboru ani v žádném DNS. Chcete-li získat soubor z MachineB, do vzdáleného machineC, můžete scp z MachineB do MachineA, poté z MachineA do vzdáleného machineC. (Např. Vzdálený stroj může ping MachineA, ale ne MachineB.) Upozornění: Testoval jsem s Fedorou a WindowsXP, MachineA je XP-box spuštěný ICS (sdílení internetového připojení)), zatímco MachineB a vzdálený strojC jsou krabice Fedora-Linux. Tento návrh pro mě vyřešil klíčový problém - tj. omezený, monitorovaný vzdálený přístup k mému vzdálenému serveru. Poznámka: Také, když se odhlásíte z MachineB, měli byste vidět dvě „Připojení k xxx. zprávy xxx.xxx.xxx uzavřeny. ".

1
Mcl

Myslíš, že potřebuješ několik skokanů :)

Nedávno jsem se setkal s tímto problémem s jumper1 jumper2 a mým finálním strojem, pokud jde o můj sol

místní skript:

#!/bin/bash
sshpass -p jumper1Passwd ssh -t [email protected] ./Y00.sh

pak na 1. skokan (což je můj router), jsem umístil skript s názvem Y00.sh:

ssh -tt [email protected] -i ~/.ssh/id_rsa sshpass -p finalPassWord ssh -tt [email protected]

Můžete je nahradit svými IP a hesly, hodně štěstí!

1
Z-Y00

ProxyCommand je čisté řešení pro případ, kdy povolíte přístup Shell v obou systémech. Chtěli jsme poskytnout vzdáleným uživatelům přístup k internímu počítači (A) prostřednictvím makléře (B), ale bez umožnění uživateli přístupu Shell k B pro zvýšení bezpečnosti. Toto fungovalo:

Vyměňte přihlašovací prostředí

Nahraďte přihlašovací prostředí (použijte chsh) pro extuser u makléře následujícím skriptem (uloženým v souboru):

#!/bin/sh   # this is essential to avoid Exec format error
ssh [email protected]

Pokud nebylo ve vzdáleném uživateli @ B pro vzdáleného uživatele nastaveno žádné přihlašovací heslo a ve vnitřním uživatelském rozhraní @ A pro připojovací zařízení @ B, provedením následujícího příkazu se vzdálený uživatel přímo přenese na A

ssh [email protected]

Tip: Před změnou na vlastní přihlašovací prostředí vytvořte potřebné nastavení hesla bez autorizace hesla autorizovanými klávesami v extuzoru @ B. Po změně, protože tento účet není přístupný komukoli přes Shell, pouze sudoer @ B může provést změny v souboru autorizované_keys přímou editací.

Sudo vi ~extuser/.ssh/authorized_keys
Sudo touch ~extuser/.hushlogin

Poslední řádek má potlačit zobrazení přihlašovacího proužku z B, takže vzdálený uživatel má transparentní přístup k A.

1
Sunthar