ProxyCommand utilizza per più hop e richiede l'autenticazione


17

Come posso riscrivere il seguente comando con ProxyCommand?

ssh -l username1 -t jumphost1 \
ssh -l username2 -t jumphost2 \
ssh -l username3 -t jumphost3 \
ssh -l username4    server

Questo non funziona

ssh -o ProxyCommand="\
ssh -l username1 -t jumphost1  \
ssh -l username2 -t jumphost2  \
ssh -l username3 -t jumphost3" \
    -l username4    server

username1@jumphost1's password:
Pseudo-terminal will not be allocated because stdin is not a terminal.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
ssh_exchange_identification: Connection closed by remote host

Sono a conoscenza del suo utilizzo con nc, ma sto cercando il modo di usarlo con 3+ hop e uso anche questa opzione con scp. Ho controllato la ssh_configpagina man, ma le informazioni sono abbastanza scarse, almeno per me.

MODIFICARE

Ho provato a utilizzare ProxyCommandnidificato in un altro ProxyCommandcome suggerito di seguito, ma ottengo sempre qualcosa seguendo le seguenti linee

debug3: ssh_init_stdio_forwarding: 192.17.2.2:2222
debug1: channel_connect_stdio_fwd 192.17.2.2:2222
debug1: channel 0: new [stdio-forward]
debug2: fd 4 setting O_NONBLOCK
debug2: fd 5 setting O_NONBLOCK
debug1: getpeername failed: Bad file descriptor
debug3: send packet: type 90
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IP_TOS 0x10
debug1: Requesting no-more-sessions@openssh.com
debug3: send packet: type 80
debug1: Entering interactive session.

Fortunatamente, poiché 7.3 -Jo ProxyJumpserve al mio scopo, anche se devo ancora lavorare sulla configurazione delle mie chiavi.

ssh -q -J user1@jumphost1,user2@jumphost2,user3@jumphost3 user@server

Risposte:


25

La ncversione non è più consigliata. Utilizzare l' -Wopzione, fornita nelle versioni recenti di OpenSSH. Inoltre, non è necessario copiare la configurazione su altri host! Tutta la configurazione deve essere eseguita sul tuo host e non interferisce scpin alcun modo. Basta creare un file ~/.ssh/configcon:

Host jumphost1
  User username1
Host jumphost2
  User username2
  ProxyCommand ssh -W %h:%p jumphost1
Host jumphost3
  User username3
  ProxyCommand ssh -W %h:%p jumphost2
Host server
  User username4
  ProxyCommand ssh -W %h:%p jumphost3

E quindi connettersi utilizzando ssh servero utilizzare scp file server:path/. Se insisti sull'allineatore (o non sei sicuro di ciò che intendi per ProxyCommandnidificazione), allora come già sottolineato, è un inferno di fughe:

ssh -oProxyCommand= \
  'ssh -W %h:%p -oProxyCommand= \
    \'ssh -W %h:%p -oProxyCommand= \
      \\\'ssh -W %h:%p username1@jumphost1\\\' \
    username2@jumphost2\' \
  username3@jumphost3' \
username4@server

Fondamentalmente devi andare dall'interno.


Grazie. Ho provato il one-liner, non ha funzionato. Non so se è solo la fuga. Puoi ricontrollare, per favore? Inoltre, puoi spiegare perché è necessario l'annidamento e il concatenamento non funziona?
— 1.61803,

1
Bene, cosa significa "non funziona!" significare? Il concatenamento funziona, ma non con scp, perché SCP si aspetta messaggi di controllo SCP, ma ottiene invece messaggi di controllo SSH e fallisce. D'altra parte, lo ProxyCommandfa in modo trasparente e quindi il più esterno ssh(o scp) riceverà i messaggi direttamente dall'altra estremità.
— Jakuje,

Ricevo il > prompt dove è in attesa di interrompere la continuazione della linea, immagino - cioè, il comando non viene mai eseguito.
— 1.61803,

1
@TrevorBoydSmith Perché richiede l'installazione di alcuni programmi esterni (nc) su tutti gli host proxy. Il reindirizzamento IO tramite -W non è necessario e l'unico requisito è che il client openssh sia installato sul tuo computer.
— Jakuje,

2
Il doppio di @RomanDodin %dovrebbe funzionare: %%hnel tuo caso
— Jakuje,

-1

L'ho fatto con due salti, ma dovrebbe funzionare per tre. Il modo più semplice è ~/.ssh/configimpostare il file su ciascun host. Quindi, se vuoi essere attivo hostae accedere a hostdvia hostbe hostc`, puoi impostare le tue configurazioni in questo modo:

In hosta:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostb nc %h %p 2> /dev/null

In hostb:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostc nc %h %p 2> /dev/null

In hostc:~/.ssh/config:

Host hostd
    User username
    ProxyCommand ssh hostd nc %h %p 2> /dev/null

È quindi possibile ssh hostdsu qualsiasi host della catena e farai la tua strada per hostd.

L'uso di netcat per il proxy non interferisce con scp.

Se per qualche motivo non vuoi davvero usare i ~/.ssh/configfile locali , puoi farlo su hosta:

ssh -oProxyCommand='ssh -oProxyCommand=\'ssh -o ProxyCommand=\\\'ssh username@hostd nc %h %p 2>/dev/null\\\' username@hostc nc %h %p 2> /dev/null' username@hostb nc %h %p 2> /dev/null' username@hostd

Come ho detto, sono consapevole ncdell'uso. Puoi davvero riscrivere il comando con cui ho postato ProxyCommandcome opzione?
— 1.61803,

Dici "sei consapevole del suo utilizzo ma vuoi usarlo scp". Non interferisce con scp. Ma ti darò il comando comicamente lungo come una modifica a breve.
— DopeGhoti,

Grazie. Potresti semplicemente riscrivere la tua risposta concentrandoti ProxyCommandsull'annidamento? Se rileggi il mio post vedrai che è l'essenza. Pensavo di poter, invece di annidare come hai fatto tu, incatenare tutti i nodi centrali ProxyCommand. Mi chiedo ancora se sia in qualche modo possibile.
— 1.61803,

Questo è in effetti ciò che viene fatto; è molto più difficile da leggere rispetto alle configurazioni in situ a causa di tutte le citazioni nidificate (e sempre più sfuggite). Devi farlo in questo modo perché stai portando tutte le ProxyCommanddirettive insieme a te al prossimo host della catena.
— DopeGhoti,

Questo è sbagliato. La configurazione è solo sul tuo computer locale, non distribuita tra gli host sulla strada mentre provi a proporre.
— Jakuje,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.