Eu gostaria de fazer algo como ssh example.com 'ls'
No entanto por página de manual do ssh:
Se o comando for especificado, ele será executado no host remoto em vez de no shell de logon.
Então o que acontece é que ls
exibe sua saída e o ssh sai.
O que não consigo descobrir é como abrir o shell de login completo e executar o comando dentro desse shell. Deixando o shell aberto após a execução do comando. Como se eu tivesse feito manualmente o seguinte:
localhost$ ssh example.com
example.com$ ls
/folder1
/folder2
example.com$ _
Alguma ideia?
ssh example.com 'ls;bash'
?Respostas:
Apenas diga ao bash para executar
ls
e depois em um shell de loginfonte
screen
. Caso contrário, isso parece fazer o que eu estava tentando fazer.-t
Forçar alocação pseudo-terminal. Isso pode ser usado para executar programas arbitrários baseados em tela em uma máquina remota. É um pouco mais adequado quebash -i
.exec
Nenhum novo processo é criado.-l
procura por ~ / .bash_profile, ~ / .bash_login e ~ / .profile, nessa ordem, e lê e executa comandos a partir de ... Sem isso, você provavelmente não pode executar scripts / comandos a partir do diretório ~ / bin, porque esse código from ~ / .profile não será executado sem o-l
sinalizador:fonte
bash
para permitir isso.exec bash
orexec $SHELL
No seu comentário sobre a resposta de fons, você diz que não funciona durante o uso
screen
.Você poderia elaborar sobre isso? Observando o código-fonte do openssh, o sshd executa o comando chamando
Portanto, por exemplo, se o seu shell padrão for
screen
, isso não funcionará muito bem porquescreen
o-c
sinalizador simplesmente substitui o seu.scrreenrc
. Portanto, não há realmente nenhuma maneira de enviar comandos para a tela, se for seu shell padrão. Você precisará executar a tela como o comando dado ao ssh, mas com um shell padrão que não é a tela .Se é isso que você está tentando fazer, acho que as coisas ficarão realmente estranhas, já
screen
que também fechará janelas com programas não interativos, então você terá que fazer um truque semelhante ao de fons, mas um nível mais profundo. SO, com, por exemplo, / bin / bash (e não tela) como seu shell padrão .O que deve - respirar fundo - ssh no host, execute bash -c com um comando de tela, que abrirá uma nova janela. Se essa janela apenas abrisse ls, ela terminaria e a tela terminaria, então usamos o truque de fons dentro da nova janela da tela .
Eu acho que vai funcionar, se é isso que você estava tentando fazer;)
fonte
screen
nesta situação é que normalmente o carregoexec screen -RR
do meu.profile
. Isso significa quebash -l
tenta carregar a tela que descarta o resto. parece que posso contornar isso removendo '-l' nas suas soluções e @fons (a sua então me deixascreen
). É meio que vacilante.Várias opções -t forçam a alocação de tty, mesmo se ssh não tiver tty local:
fonte