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.


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


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 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.