O SSH ProxyJump requer acesso ao shell local?

2

Eu tenho uma conta que pode ssh para localhost bem:

$ ssh root@localhost
# logout
Connection to localhost closed.

ele não funciona com o recurso JumpProxy do ssh, no entanto:

$ ssh -J root@localhost root@localhost
/sbin/nologin: invalid option -- 'c'

Usage:
 nologin [options]

Politely refuse a login.

Options:
 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see nologin(8).
ssh_exchange_identification: Connection closed by remote host

Isto parece estar relacionado ao fato de que o shell do usuário atual está configurado para / sbin / nologin - se eu alterá-lo temporariamente para bash o comando funciona. parece ser uma prática recomendada desativar o acesso ao shell para usuários que não precisam dele - mas (por que ???) o JumpProxy precisa disso?

    
por mnagel 21.07.2018 / 21:49

1 resposta

3

No meu teste no OpenSSH 7.4, especificamente:

$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

Consegui definir o shell do meu usuário como /sbin/nologin ou /bin/false e consegui fazer login no servidor B por meio do servidor A.

Exemplos

$ cat /etc/passwd
user1:x:1001:1001::/home/user1:/sbin/nologin

ou

$ cat /etc/passwd
user1:x:1001:1001::/home/user1:/bin/false
host A → B

Tenta entrar no servidor B (mulder) através do servidor A (centos7) trabalhado.

[vagrant@centos7 ~]$ ssh -J user1@localhost root@mulder
user1@localhost's password:
Last login: Sat Jul 21 15:59:00 2018 from macbook1
[root@mulder ~]#
host A → B → C

E com a chance de que foi algo engraçado passar pela VM, adicionei um terceiro host ao mix e ainda funcionou.

[vagrant@centos7 ~]$ ssh -J user1@localhost,user1@mulder root@skinner
user1@localhost's password:
user1@mulder's password:
Last login: Sat Jul 21 16:09:48 2018 from 192.168.1.10
[root@skinner ~]# 

NOTA: no cenário acima, o usuário1 tem /sbin/nologin definido em /etc/passwd nos servidores centos7 & mulder.

Depurando seu problema

Então eu começaria com -vvv switches para depurar ssh .

$ ssh -vvv -J user1@localhost,user1@mulder root@skinner
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 58: Applying options for *
debug1: Setting implicit ProxyCommand from ProxyJump: ssh -l user1 -J user1@localhost -vvv -W %h:%p mulder
debug1: Executing proxy command: exec ssh -l user1 -J user1@localhost -vvv -W skinner:22 mulder
...
...
debug1: Setting implicit ProxyCommand from ProxyJump: ssh -l user1 -vvv -W %h:%p localhost
debug1: Executing proxy command: exec ssh -l user1 -vvv -W mulder:22 localhost
...
...
debug2: PTY allocation request accepted on channel 0
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: shell request accepted on channel 0
Last login: Sat Jul 21 16:10:28 2018 from 192.168.1.10
[root@skinner ~]#

OBSERVAÇÃO: Com o acima, você pode ver o que o -J está realmente fazendo nos bastidores, pois ele se expande para vários comandos ssh à medida que avança pelos servidores proxy de salto.

Para triagem do problema, sugerimos que você execute esses comandos diretamente e veja como eles se saem.

raiz @ localhost → raiz @ localhost

Nas minhas experiências, eu pude ssh da mesma maneira que você estava tentando:

$ ssh -J root@localhost root@localhost
root@localhost's password:
root@localhost's password:
Last login: Sat Jul 21 16:40:54 2018 from localhost
CentOS 7 Build 1805.02
$

Para fazer isso, você precisa ter o /etc/ssh/sshd_config set para que o root seja permitido no login.

Referências

por 21.07.2018 / 22:08