Executando um comando no host remoto com SSH interativo (condicionalmente)

9

Eu gostaria de poder executar automaticamente um comando em um host remoto toda vez que fizer login nesse host, mas dentro da atual sessão SSH interativa.

Algo como

ssh user@remotehost [run do.sh]

onde do.shrealiza algumas tarefas de limpeza e, em seguida, reconecta a uma screensessão (atualmente eu corro do.shmanualmente depois de fazer login no host).

Não quero adicioná-lo .bashrcporque faço login neste host de outras máquinas e não quero do.shexecutar quando faço o login a partir daí, por isso preciso que seja opcional.

Jim Farkas
fonte
1
por que você simplesmente não corre ssh user@remotehost /path/to/do.sh? Se funcionar, você pode até mesmo apelido lo em .ssh / config ou seu .bashrc personnal
Coren
Então, você deseja executar "do.sh" quando efetuar login no remotehost de algum lugar, mas não quando efetuar login no remotehost de outro local? Quais hosts que você se conectar a partir deveria desencadear "do.sh", e que os outros não deveria?
Tapete de
Sim, eu quero executá-lo algumas vezes, mas não o tempo todo, a razão para isso é que tenho um atalho de teclado em um iniciador no meu Mac que me dá o que quero na maioria das vezes. Apertei um atalho e quero colocar ssh na caixa e, em seguida, reconectar a uma sessão de tela, mas não quero fazer isso se usar um terminal comum como "ssh user @ host". A solução mencionada abaixo por Patkos faz exatamente o que eu preciso.
Jim Farkas

Respostas:

15

Você pode tentar algo como isto:

ssh server -t "do.sh; bash --login"

conforme sugerido aqui: /server/167416/change-directory-automatically-on-ssh-login

Ou você pode tentar usar a opção 'LocalCommand' em sshd_conf (ou ~ / .ssh / config), conforme descrito na página de manual oficial: http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1

Patkos Csaba
fonte
1
Muito obrigado!! O servidor ssh -t "/home/user/do.sh; bash --login" funcionou para mim. köszönöm szépen!
Jim Farkas
1
Szivesen (de nada)
Patkos Csaba
@PatkosCsaba Evite outros idiomas além do inglês aqui. Isso se aplica também aos comentários.
LinuxSecurityFreak 30/11/16
3

Uma parte do quebra-cabeça: assumindo o OpenSSH, o sshcliente definirá a seguinte variável de ambiente:

SSH_CONNECTION Identifica as extremidades do cliente e do servidor da conexão. A variável contém quatro valores separados por espaço: endereço IP do cliente, número da porta do cliente, endereço IP do servidor e número da porta do servidor.

Portanto, você pode usar essas informações para descobrir de onde vem sua conexão .

sr_
fonte