Comando único para efetuar login no SSH e executar o programa?


58

Existe uma maneira de estruturar um único comando para efetuar login via SSH em um servidor remoto e executar um programa no shell de login remoto?

No manual do OpenSSH, ele lê "Se o comando for especificado, ele será executado no host remoto em vez de no shell de login". Assim, por exemplo, você ssh user@server mailfará logon no servidor remoto, exibirá o status da caixa de correio e retornará ao shell local. Existe uma maneira de permanecer no shell remoto depois de exibir o status do email?

Além disso, ssh user@server [command]parece não funcionar se o comando for um programa, por exemplo, vim ou mutt. Existe uma maneira de fazer login no shell remoto e executar um programa enquanto permanece no shell remoto durante o programa e depois de sair do programa, saindo finalmente apenas com um logoutcomando específico (como em uma sessão SSH normal)?

Eventualmente, eu gostaria de poder colocar um comando como um alias no local .bashrc, para que ele pudesse ser executado rapidamente quando desejado. Um exemplo seria o login via SSH em um servidor remoto e abrir o mutt no servidor remoto para ler ou enviar email.


O que você quer dizer com permanecer no shell remoto após exibir o status do email? Isso não seria equivalente a fazer um ssh depois de executar o comando mail ssh remote@server mail ; ssh remote@server:? Além disso, qualquer comando executado remotamente que precise de um terminal não sobreviverá / funcionará sobre o ssh, certo?
Mkc #

Bem, isso parece funcionar para executar o comando e obter o shell remoto, mas ele abre uma conexão SSH e executa o comando e fecha a conexão SSH e depois abre outra conexão SSH. Existe alguma maneira de fazer isso tudo com a primeira conexão única? Além disso, isso ainda não permite que o comando execute um programa.
user981178

Respostas:


90

Você já tentou ssh -t user@server "mail && bash"(ou substituiu bashpor qualquer shell que quiser)?

A -té necessária, a fim de criar um pseudo-tty para bater para usar como um escudo interactiva.


11
Embora, eu admito, eu provavelmente prefira apenas executar muttdentro de um tmuxor screen, e então eu posso anexar e reconectar à vontade, mais eu posso executar quantas conchas adicionais quiser.
Jsbillings

11
Bem, estou encontrando vários comportamentos com esse comando. Utilizado como acima (na resposta), ele ainda exibe apenas o status da caixa de correio e efetua logout, mas agora também exibe que a conexão está fechada. Utilizado como acima, mas com o nano, por exemplo, em vez de correio, ele abre uma sessão nano e, ao sair, retorna ao shell do bash remoto, que deve ser encerrado em exitvez de logout. Ainda não consigo testá-lo com mutt (ou similar).
user981178

A -topção produz algum tipo de preocupação com segurança? Eu não usei isso antes.
user981178

Tanto quanto eu sei, não introduz nenhuma preocupação de segurança. Você já tentou substituir o &&por um ;?
22414 Brm #

qualquer comando que saia com um status de saída diferente de zero faria com que o segundo comando não fosse executado devido à lógica do shell.
jsbillings
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.