Como executar um comando remoto para uma sessão ssh existente

0

Estou tentando obter informações básicas na minha máquina local a partir de conexões ssh. O objetivo aqui é obter o usuário atual, hostname, diretório de trabalho atual na minha barra de status do tmux.

Eu habilitei ControlMaster no meu ~/.ssh/config :

Host *
  ControlMaster auto
  ControlPath ~/.ssh/socket-%r@%h:%p

Agora, consegui obter o ControlPath de um plugin tmux caseiro e posso enviar comandos através do socket:

echo $(ssh -S ~/.ssh/socket-$user@$host:$port $host "$command")

Isso está funcionando bem para obter o nome do host remoto e o usuário. O problema é que, quando eu mudo o meu usuário remoto, whoami ainda está retornando o usuário que foi usado para efetuar o login.

Por exemplo, com whoami ( ~ é local, > é executado na sessão ssh):

~ ssh soyuka@host
> whoami
  soyuka
~ ssh -S ~/.ssh/socket-soyuka@host:22 host whoami
  soyuka

> sudo -s
> whoami
  root

~ ssh -S ~/.ssh/socket-soyuka@host:22 host whoami
  soyuka #Here I want to get root because the remote user is now root

Por exemplo, com pwd ( ~ é local, > é executado na sessão ssh):

~ ssh soyuka@host
~ ssh -S ~/.ssh/socket-soyuka@host:22 host pwd
  /home/soyuka

> cd downloads
> pwd
  /home/soyuka/downloads

~ ssh -S ~/.ssh/socket-soyuka@host:22 host pwd
  /home/soyuka #Here I want to get /home/soyuka/downloads

Isso é possível de alguma forma para executar o comando na sessão ssh atual pelo soquete?

    
por soyuka 23.05.2015 / 14:56

1 resposta

3

O que você está pedindo não parece fazer sentido.

Here I want to get root because the remote user is now root

Não, o usuário remoto agora é root. O fato de você ter feito sudo -s no sistema local não altera o fato de você estar ssh'ing na conta soyuka remotamente.

A resposta para "Aqui quero obter / home / soyuka / downloads" é semelhante.

Is this possible somehow to execute the command on the current ssh session by it's socket?

Acredito que você possa ter um conceito errado de que há alguma sessão persistente de longa duração do SSH. De fato, toda vez que você faz:

ssh -l remoteuser host some-command

... uma nova sessão SSH é aberta, some-command é executado naquela sessão (sem um pty, ao contrário das sessões SSH abertas sem um comando remoto especificado), e então essa sessão é fechada .

Mesmo se houvesse uma sessão remota persistente, não há motivos para esperar que fazer coisas localmente, como sudo ou cd , afetaria de alguma forma essa sessão remota.

O fato de você estar usando sockets de controle SSH não altera isso. A única coisa diferente com uma sessão SSH escrava comparada a uma sessão normal é que a sessão do SSH é conectada em uma conexão existente do SSH em vez de uma nova conexão.

    
por 23.05.2015 / 16:08

Tags