Suponha a seguinte configuração:
- O usuário
bob
está trabalhando localmente em sua estação de trabalhofoo
. - O usuário
alice
está trabalhando localmente em sua estação de trabalhobar
. - O usuário
bob
tem acesso ssh ao servidorbaz:22
por meio de uma chave armazenada embob@foo:.ssh/id_rsa
. - O usuário
alice
tem acesso ssh Ãbob
estação de trabalho,foo:22
mas não ao servidorbaz
.
Existe uma maneira de bob
ssh baz
compartilhar sua sessão (via encaminhamento de porta?) Ou chave (via encaminhamento ssh-agent
?) De modo que alice
possa acessar baz
viabar
foo
(assumindo bob
a identidade de on foo
) ?
Termo aditivo:
Há mais alguns pensamentos que eu deveria ter esclarecido:
bob
não queralice
saber a senha delebob
não queralice
poder continuarrm -rf /home/bob
(foo
nobaz
entanto, isso seria bom, obviamente).
Conforme sugerido por @mukesh-sai-kumar , pode-se fazer o alice
login foo
(como bob
?) E ssh
com a chave compartilhada de lá.
A melhor abordagem que posso ver até agora seria criar um novo par de chaves para alice
on bar
, permitir a chave pública foo
e executar automaticamente o ssh bob@baz
por meio da command="ssh [...]"
opção no authorized_keys
arquivo.
Isso permitiria configurar ssh baz
o uso bar
do ssh bob@foo
novo par de chaves via alice@bar:.ssh/config
com o encaminhamento de bob@foo
logins usando essa chave especÃfica para bob@baz
via bob@foo:.ssh/authorized_keys
(autorizando alice
a chave de mas restringindo command
a ssh baz
chamada).
Dessa forma, as duas novas restrições seriam atendidas e alice
nem veriam nada, como mostra esta hipotética sessão interativa:
[alice@foo:~] (1) $ hostname
foo
[alice@foo:~] (2) $ whoami
alice
[alice@foo:~] (3) $ ssh baz
[bob@baz:~] (1) $ hostname
baz
[bob@baz:~] (2) $ whoami
bob
[bob@baz:~] (3) $ exit
[alice@foo:~] (4) $ hostname
foo
[alice@foo:~] (5) $ whoami
alice
[alice@foo:~] (6) $
O único problema restante é que bob
a chave ssh foo
precisa ser compartilhada com bob
a sessão iniciada por ssh
from alice
(via ssh-agent
? ) .
Solução: Sessão SSH aninhada.
alice pode fazer login na estação de trabalho de bob (foo:22) via SSH com a identidade de bob e, em seguida, fazer login em baz via SSH com a identidade de bob (e sua chave, pois ambos agora estão acessÃveis a alice).
Uma representação baseada em comando disso:
Representação esquemática:
Alice pode dar a Bob sua chave pública, e Bob pode adicionar uma linha ao seu próprio
.ssh/authorized_keys
arquivo que permitirá a Alice iniciar uma sessão ssh (como Bob) na estação de trabalho de Bobfoo
. Usando acommand=
opção, Bob pode restringir a chave de Alice para não conceder um shell interativo, mas uma conexão ssh aninhadabaz
como Bob e usar uma chave acessÃvel localmente para Bob embar
.command="ssh -I .ssh/id_rsa bob@baz:22" ssh-rsa AAA...== alice@whatever
Opcionalmente, você pode incluir outras opções de restrição (
no-port-forwarding
,from=
, etc. - consultesshd
a seção da página man em AUTHORIZED_KEYS FILE FORMAT).Quando Alice executar
ssh bob@bar
e autenticar com sua chave privada, ela será conectadabar
a uma sessão ssh embaz
, sem ter nenhum controle sobre a sessão intermediária na estação de trabalho de Bob.Observe que, do ponto de vista de
baz
(logging, auditoria de segurança), não há distinção entre essa conexão encapsulada iniciada por Alice e uma conexão "normal" feita por Bob a partir de sua própria estação de trabalho. Isso pode ser o que você pediu, mas não o que você quer.Para tornar a chave protegida disponÃvel para Alice para sua sessão, você pode definir explicitamente a variável de ambiente
SSH_AUTH_SOCK
para ser o caminho que Bob usa para sua sessão (mude aauthorized_keys
entrada paracommand="SSH_AUTH_SOCK=/path/to/bobs/agent_socket ssh bob@baz:22" ssh-rsa AAA...
) Para evitar ter que atualizar o caminho quando ele muda (logoff/login normalmente ), Bob pode executar um agente dedicado em nome de Alice com um caminho explÃcito especificado (ssh-agent -a ~/.ssh/agent_for_alice
e adicionar apenas a chave especÃfica comSSH_AUTH_SOCK=~/.ssh/agent_for_alice ssh-add ~/.ssh/id_rsa
e inserir a frase secreta.